nanaboo:
Digamos que mi original Map
contiene lo siguiente:
Map<String, Set<String>> original = Maps.newHashMap();
original.put("Scott", Sets.newHashSet("Apple", "Pear", "Banana");
original.put("Jack", Sets.newHashSet("Banana", "Apple", "Orange");
Y yo quiero crear un invertido Map
que contiene lo siguiente:
"Apple": ["Scott", "Jack"]
"Pear": ["Scott"]
"Banana": ["Scott", "Jack"]
"Orange": ["Jack"]
Sé que se puede hacer en la moda de edad (pre-Java 8), pero ¿cómo puedo conseguir los mismos utilizando la API de Java Stream?
Map<String, Set<String>> reversed = original.entrySet().stream().map(x -> ????).collect(??)
Hay pregunta similar publicado aquí , pero que sólo funciona para un solo valor Map
s.
también:
Una solución más imprescindible pero más simple sería utilizar forEach
:
Map<String, Set<String>> original,result; // initialised
original.forEach((key, value) -> value.forEach(v ->
result.computeIfAbsent(v, k -> new HashSet<>()).add(key)));