Chciałbym połączyć dwa mapa z JAVA 8 Stream:Merge Map <String, List <String> Java 8 Stream
Map<String, List<String>> mapGlobal = new HashMap<String, List<String>>();
Map<String, List<String>> mapAdded = new HashMap<String, List<String>>();
próbuję użyć tej realizacji:
mapGlobal = Stream.of(mapGlobal, mapAdded)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())
));
Jednak ta implementacja tworzyć tylko wynik takiego:
Map<String, List<Object>>
Jeśli jeden klucz nie jest zawarty w mapGlobal
, zostanie dodany jako nowy klucz z odpowiednią listą ciągów. Jeśli klucz zostanie zduplikowany pod numerami mapGlobal
i mapAdded
, obie listy zostaną scalone jako: A = {1, 3, 5, 7}
i B = {1, 2, 4, 6}
, a następnie A ∪ B = {1, 2, 3, 4, 5, 6, 7}
.
Ta implementacja nie będzie korzystać z ulepszeń w kolekcjach strumieni. Obie mapy mogą być ogromne, dlatego chciałbym użyć czegoś takiego jak parallelStream(). Czy to jest możliwe. – ypriverol
@ypriverol Tak, mogę to edytować. – Tunaki
O ile 'mapGlobal' nie jest' ConcurrentMap', mutowanie go wewnątrz strumienia równoległego nie jest bezpieczne. – Misha