nanaboo:
Vamos dizer que o meu original Map
contém o seguinte:
Map<String, Set<String>> original = Maps.newHashMap();
original.put("Scott", Sets.newHashSet("Apple", "Pear", "Banana");
original.put("Jack", Sets.newHashSet("Banana", "Apple", "Orange");
E eu quero criar uma invertida Map
contendo o seguinte:
"Apple": ["Scott", "Jack"]
"Pear": ["Scott"]
"Banana": ["Scott", "Jack"]
"Orange": ["Jack"]
Eu sei que pode ser feito em moda antiga (pré-Java 8), mas como faço para conseguir o mesmo usando a API Java Stream?
Map<String, Set<String>> reversed = original.entrySet().stream().map(x -> ????).collect(??)
Não há pergunta semelhante postado aqui , mas isso só funciona para valor único Map
s.
também:
Uma solução mais imperativo mas mais simples seria usar forEach
:
Map<String, Set<String>> original,result; // initialised
original.forEach((key, value) -> value.forEach(v ->
result.computeIfAbsent(v, k -> new HashSet<>()).add(key)));