Проблема, с которой вы столкнулись, это тип карты, которую вы создаете:
Map<Set<String>, Set<String>>
, а не Map<String, Set<String>>
.
Таким образом, вам необходимо расширитьСначала значения карты, например:
Map<String, Set<String>> collect = map.entrySet()
.parallelStream()
// Expand (k, {v1, v2, v3}) to [(v1, k), (v2, k), (v3, k)]
.flatMap(e -> e.getValue().stream().map(ee -> new SimpleEntry<>(ee, e.getKey())))
.collect(
Collectors.groupingBy(
Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, Collectors.toSet())));
Если вы не действительно нуждаетесь в параллельной обработке, я думаю, что было бы намного проще использовать циклы:
Map<String, Set<String>> collect = new HashSet<>();
for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
for (String v : entry.values()) {
collect.computeIfAbsent(v -> new HashSet<>())
.add(entry.getKey()));
}
}