ストリーム:地図<文字列、リスト<String>のJavaをマージ8私はJAVA 8ストリームを持つ2つの地図をマージしたい
Map<String, List<String>> mapGlobal = new HashMap<String, List<String>>();
Map<String, List<String>> mapAdded = new HashMap<String, List<String>>();
私はこの実装を使用してみてください:しかし
mapGlobal = Stream.of(mapGlobal, mapAdded)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())
));
を、この実装
Map<String, List<Object>>
:だけのような結果を作成します1つのキーがmapGlobal
に含まれていない場合は、対応するストリングのリストと共に新しいキーとして追加されます。キーがmapGlobal
とmapAdded
に複製されている場合、両方の値のリストは、A = {1, 3, 5, 7}
とB = {1, 2, 4, 6}
とA ∪ B = {1, 2, 3, 4, 5, 6, 7}
のようにマージされます。
この実装では、ストリームコレクションの改善は使用されません。両方のマップが巨大な場合、私はparallelStream()のようなものを使用したいと思います。それは可能ですか? – ypriverol
@ypriverolはい、あなたはそれを編集することができます。 – Tunaki
'mapGlobal'が' ConcurrentMap'でない限り、パラレルストリームの内部からそれを変更することは安全ではありません。 – Misha