java: obtiene el recuento de todas las claves y valores distintos en Map <String, Set <String>> [duplicate]
entrada: Map <String, Set> map
por ejemplo: mapa =
{"a"=[],
"b"=["b", "1", "2", "4"]}
salida esperada: 5 ("b" aparece como clave y valor. debe contarse como uno)
esto es lo que he intentado hasta ahora. ¿Hay una mejor manera de hacer esto?
Set<String> o = new HashSet<String>();
o.addAll(m1.keySet());
o.addAll(m1.values().stream().flatMap(Collection::stream).collect(Collectors.toSet()));
System.out.println(o.size());
¿Es posible transmitir en el conjunto de entradas del mapa para llegar a esta salida? Además, la creación de un hashset por separado parece innecesaria solo para obtener un recuento
Respuestas
1 Eran
Puedes hacer algo como esto:
Set<String> o = m1.entrySet()
.stream()
.flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
.collect(Collectors.toSet());
es decir, cree una Stream<String>
de cada entrada del Map
.