es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo aplicar la lógica IF durante el cálculo de la tubería de flujo?

Tengo un código como este. Pero se ve un poco feo.
¿Hay alguna forma de evitar la recopilación en el medio del tubería?

Set<String> strings= new HashSet(Arrays.asList("str1", "str2", "str3" ));
Optional.of(strings.stream()
                .filter(myMap::containsKey)
                .collect(Collectors.toMap(Function.identity(), myMap::get)))
                .map(stringListMap -> stringListMap.isEmpty() ? null : stringListMap)
                .orElse(myMap)
                .entrySet()
                .stream()
                .flatMap(...)
                ...  
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma de evitar la creación de una nueva colección en medio del pipeline utilizando el método filter() para filtrar las entradas del Map directamente en lugar de crear primero un conjunto de cadenas para filtrar. Esto simplificaría el código y lo haría más eficiente. Aquí hay un ejemplo de cómo podría verse el código:

    myMap.entrySet()
         .stream()
         .filter(e -> Arrays.asList("str1", "str2", "str3").contains(e.getKey()))
         .flatMap(...)
         ...
    

    Este código filtra directamente las entradas del Map myMap utilizando el método contains() de la clase Arrays, en lugar de crear primero un conjunto de cadenas y luego filtrar sobre él. Esto elimina la necesidad de los métodos Optional y collect(), haciendo que el código sea más limpio y eficiente.

Comments are closed.