java: pobierz liczbę wszystkich odrębnych kluczy i wartości w Map <String, Set <String>> [duplicate]

Jan 26 2021

wejście: Map <String, Set> map

np .: map =

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

oczekiwany wynik: 5 („b” pojawia się jako klucz i wartość. należy liczyć jako jeden)

to jest to, czego próbowałem do tej pory. czy jest lepszy sposób na zrobienie tego?

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

Czy można przesyłać strumieniowo dane wejściowe mapy, aby dotrzeć do tego wyjścia? Również tworzenie oddzielnego skrótu wydaje się niepotrzebne tylko po to, aby uzyskać liczbę

Odpowiedzi

1 Eran Jan 26 2021 at 15:20

Możesz zrobić coś takiego:

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

tj. utwórz Stream<String>każdy wpis pliku Map.