Java: Anzahl aller unterschiedlichen Schlüssel und Werte in Map <String, Set <String >> [duplizieren] abrufen

Jan 26 2021

Eingabe: Map <String, Set> Map

zB: map =

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

erwartete Ausgabe: 5 ("b" erscheint als Schlüssel und Wert. sollte als eins gezählt werden)

das habe ich bisher versucht. Gibt es einen besseren Weg, dies zu tun?

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

Ist es möglich, auf dem Entryset der Karte zu streamen, um zu dieser Ausgabe zu gelangen? Auch das Erstellen eines separaten Hash-Sets ist nicht erforderlich, um eine Zählung zu erhalten

Antworten

1 Eran Jan 26 2021 at 15:20

Sie können so etwas tun:

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

dh erstellen Sie einen Stream<String>von jedem Eintrag der Map.