Конечно, это возможно:
Map<List<String>, String> map = new HashMap<>();
map.put(List.of("Los Angeles", "New York", "Chicago"), "USA");
map.put(List.of("Toronto", "Vancover", "Montréal"), "Canada");
Map<String, String> newMap = map.entrySet().stream().flatMap(entry -> entry.getKey().stream().map(city -> Map.entry(city, entry.getValue()))).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
Пример вывода:
{Нью-Йорк = США, Монреаль = Канада, Чикаго = США, Ванковер = Канада , Лос-Анджелес = США, Торонто = Канада}
Сначала вы должны flatMap
на entrySet
Stream
где вы можете map
ключи для новых Stream
записей, например.
Как вы упомянули, вам нужно это как Stream
, поэтому, вероятно, вы захотите остановиться до collect
:
map.entrySet().stream()
.flatMap(entry -> entry.getKey().stream()
.map(city -> Map.entry(city, entry.getValue())))
(Те записи, которые вы можете собрать для нового Map
.)