"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo convertir de manera eficiente una lista de objetos a opcional en Java Streams?

¿Cómo convertir de manera eficiente una lista de objetos a opcional en Java Streams?

Publicado el 2024-11-07
Navegar:887

How to Efficiently Convert List of Objects to Optional in Java Streams?

Volverse conciso con Java 8's Opcional y Stream::flatMap

Al trabajar con secuencias de Java 8, transformar una Lista a Opcional y extraer el primer valor Otro de manera eficiente puede ser un desafío. Si bien flatMap generalmente requiere una secuencia de retorno, la ausencia de stream() para Opcional complica las cosas.

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();
Declaración de liberación Este artículo se reimprime en: 1729667949 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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