Перейдите к списку объектов и извлеките нужный вам ключ. map
-> flatten
-> toMap
source.entrySet()
.stream()
.flatMap(e -> e.getValue()
.stream()
.map(x -> new SimpleEntry<>(x.getMyKey(), e.getKey())))
.collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue));
используйте функцию слияния, если ожидаетсядубликаты getMyKey()
значений:
source.entrySet()
.stream()
.flatMap(e -> e.getValue()
.stream()
.map(x -> new SimpleEntry<>(x.getMyKey(), e.getKey())))
.collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue, (l, r) -> l));
Примечание: вышеизложенное использует ключи исходной карты в качестве значений итоговой карты, поскольку это то, что вы, кажется, иллюстрируете в своем посте, еслиоднако вы хотите, чтобы ключ исходной карты оставался в качестве ключа полученной карты, а затем измените new SimpleEntry<>(x.getMyKey(), e.getKey())
на new SimpleEntry<>(e.getKey(),x.getMyKey())
.