Я пытаюсь сгладить карту, но не теряю ключ.
Что бы я хотел получить:
Map<K, Collection<V>> keyToValuesMap = ...;
Stream.flattenCollection(keyToValuesMap).forEach((k,v) -> print(k, v));
Где v
представляет каждое значение в коллекции, соответствующеедля каждого k
.
Эквивалентный код Java старой школы будет выглядеть следующим образом:
for (Map.Entry<K, Collection<V>> entry : keyToValuesMap.entrySet())
{
K k = entry.getKey();
for (V v : entry.getValue())
{
print(k, v);
}
}
Обратите внимание, что этот вопрос отличается от простого потока по значениям,потому что key
потерян, вот так: keyToValuesMap.entrySet().stream().flatMap(keyValuesEntry -> keyValuesEntry.getValue().stream()).forEach(v -> printJustV(v));
* print
- это просто пример действия над парой.
* Я искал такой API в StreamEx , но не смог его найти.Я был уверен, что найду это там ...