anymatch all java java-stream

all - match java 8



Utilice Streams para devolver Boolean si todos los valores de Lista en un Mapa están vacíos/no vacíos (3)

Dado un Map asigna una Cadena a una List , ¿hay una manera de usar Java Streams para devolver un Booleano donde TRUE significa que uno o más de la lista tenían elementos? Si todas las listas en el mapa estuvieran vacías, devuelve FALSO.

Map< String , List<String> > map = …

¿Puede el uso de Streams reemplazar este código convencional?

// See if any diffs were found. Loop through the Map, look at each List of diffs to see if non-empty. boolean anyElementsInAnyList = false; for (List<String> list : map.values () ) { if (!list.isEmpty()) { anyElementsInAnyList = true; break; } }

Tenga en cuenta que podemos salir del examen después del primer hallazgo. No es necesario examinar todos los valores del mapa (todas las listas). Estaría bien si, por eficiencia, el Stream pudiera hacer el mismo trabajo de detención en el primer hallazgo (una operación de "cortocircuito").


En Java 8 puedes comprobar que no todas las listas están vacías.

boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);


Utilice el método anyMatch que encuentra si algún elemento de la secuencia coincide con un Predicate . Aquí, su predicado es que el valor de la entrada (la lista) no está vacío.

boolean anyNonEmpty = map.entrySet() .stream() .anyMatch(entry -> !entry.getValue().isEmpty());


int size = Map.entrySet().stream() .map(entry -> entry.getValue()) .flatMap(list -> list.stream()) .size(); if(size==0) return Boolean.False; else return Boolean.True;

Este código es simple y puede ayudar en su trabajo.