java: obtenir le nombre de toutes les clés et valeurs distinctes dans Map <String, Set <String>> [duplicate]

Jan 26 2021

entrée: Map <String, Set> map

par exemple: map =

    {"a"=[], 
    "b"=["b", "1", "2", "4"]}

résultat attendu: 5 ("b" apparaît comme clé et valeur. doit être compté comme un)

c'est ce que j'ai essayé jusqu'à présent. Y a-t-il une meilleure manière de faire cela?

    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());

Est-il possible de diffuser sur le jeu d'entrées de la carte pour arriver à cette sortie? Créer également un hashset séparé semble inutile juste pour obtenir un décompte

Réponses

1 Eran Jan 26 2021 at 15:20

Vous pouvez faire quelque chose comme ceci:

Set<String> o = m1.entrySet()
                  .stream()
                  .flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
                  .collect(Collectors.toSet());

c'est-à-dire créer un Stream<String>de chaque entrée du Map.