我想使用JAVA 8 Stream合并两个Map:
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>>
的结果。如果一个键不在mapGlobal
中,则会将其作为新的键添加,并与对应的字符串列表一起添加。如果键在mapGlobal
和mapAdded
中都有重复,则两个值列表将合并为:A = {1,3,5,7}
和B = {1,2,4,6}
,然后A ∪ B = {1,2,3,4,5,6,7}
。
ConcurrentHashMap
。 - Tunaki