Map.Entry
〜Set<Long>
のインスタンスをマッピングしています。元のマップのキーのトラックが失われていることを意味し、同じキーを持つ新しいマップにそれらを収集することはできません。
Map<Long, Set<Long>> result=
myFirstMap.entrySet().stream()
.map(e -> new AbstractMap.SimpleImmutableEntry<>(e.getKey(),
e.getValue().stream().map(MyClass::getId).collect(Collectors.toSet())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
代替変換を行うために、一つにmap
とcollect
ステップを融合することである。
最初のオプションはMap.Entry<Long, Set<Long>>
インスタンスにMap.Entry<Long, List<MyClass>>
インスタンスをマッピングし、新しいマップにエントリを収集することです右toMap
コレクタに提供された値関数で:
Map<Long, Set<Long>> result=
myFirstMap.entrySet().stream().collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream().map(MyClass::getId).collect(Collectors.toSet())));
この方法では、新しいMap.Entry
インスタンスを作成しないようにして取得しますしかし、より簡潔なコードでは、柔軟な柔軟性が失われます。その間に追加のストリーム操作を連鎖させることはできません。
あなたの編集は、その答えを無効に1年はここにいた。お願い、それはやめて。 – shmosel