java: ottieni il conteggio di tutte le chiavi e i valori distinti in Map <String, Set <String>> [duplicate]
input: Map <String, Set> map
ad esempio: map =
{"a"=[],
"b"=["b", "1", "2", "4"]}
output previsto: 5 ("b" appare come chiave e valore. deve essere contato come uno)
questo è quello che ho provato finora. c'è un modo migliore per farlo?
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());
È possibile eseguire lo streaming sul set di ingresso della mappa per arrivare a questo output? Anche la creazione di un hashset separato non sembra necessaria solo per ottenere un conteggio
Risposte
1 Eran
Puoi fare qualcosa del genere:
Set<String> o = m1.entrySet()
.stream()
.flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
.collect(Collectors.toSet());
cioè creare una Stream<String>
di ogni voce di Map
.