Volverse conciso con Java 8's Opcional y Stream::flatMap
Al trabajar con secuencias de Java 8, transformar una Lista
Solución Java 16
Java 16 presenta Stream.mapMulti, lo que permite una transmisión más enfoque conciso:
Optional result = things.stream()
.map(this::resolve)
.mapMulti(Optional::ifPresent)
.findFirst();
Solución Java 9
JDK 9 agrega Opcional.stream, simplificando la tarea:
Optional result = things.stream()
.map(this::resolve)
.flatMap(Optional::stream)
.findFirst();
Solución Java 8
En Java 8, se puede adoptar el siguiente enfoque:
Optional result = things.stream()
.map(this::resolve)
.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
.findFirst();
Uso de una función auxiliar para convertir Opcional en Stream:
static Stream streamopt(Optional opt) {
if (opt.isPresent())
return Stream.of(opt.get());
else
return Stream.empty();
}
Optional result = things.stream()
.flatMap(t -> streamopt(resolve(t)))
.findFirst();
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3