java: obtiene el recuento de todas las claves y valores distintos en Map <String, Set <String>> [duplicate]

Jan 26 2021

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 Jan 26 2021 at 15:20

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.