Cómo crear un mapa inversa cuando mapa original contiene la colección como el valor?

nanaboo:

Digamos que mi original Mapcontiene 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 Mapque 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 Maps.

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172705&siteId=1
Recomendado
Clasificación