我想合并两个地图与JAVA 8流:
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())
));
但是,此实现只会产生如下结果:
地图
如果
mapGlobal
中不包含一个键,则该键将与相应的字符串列表一起添加为新键。如果键在mapGlobal
和mapAdded
中重复,两个值列表将合并为:A={1,3,5,7}
和B={1,2,4,6}
,然后A∪ B={1,2,3,4,5,6,7}
。
原始实现不会创建类似Map的结果
使用Foreach over Map可以用来合并给定的数组列表。
public Map<String, ArrayList<String>> merge(Map<String, ArrayList<String>> map1, Map<String, ArrayList<String>> map2) {
Map<String, ArrayList<String>> map = new HashMap<>();
map.putAll(map1);
map2.forEach((key , value) -> {
//Get the value for key in map.
ArrayList<String> list = map.get(key);
if (list == null) {
map.put(key,value);
}
else {
//Merge two list together
ArrayList<String> mergedValue = new ArrayList<>(value);
mergedValue.addAll(list);
map.put(key , mergedValue);
}
});
return map;
}
您可以通过迭代mapAdded
中的所有条目并将它们合并到mapGlobal
中来实现这一点。
下面通过调用foreach(action)
遍历mapAdded
的条目,其中操作使用每个条目的键和值。对于每个条目,我们在mapGlobal
上调用合并(key,value,remappingFunction):如果键不存在,这将在键
k
和值v
下创建条目,或者调用如果它们已经存在,则赋予重映射函数。这个函数需要合并两个列表,在这种情况下,首先添加到TreeSet
中,以确保元素的唯一性和排序,并将其转换回列表:
mapAdded.forEach((k, v) -> mapGlobal.merge(k, v, (v1, v2) -> {
Set<String> set = new TreeSet<>(v1);
set.addAll(v2);
return new ArrayList<>(set);
}));
如果您想并行运行,可以通过获取
entrySet()
并对其调用parallelStream()
来创建流管道。但是,您需要确保使用支持mapGlobal
并发的映射,比如ConcurrentHashMap
。
ConcurrentMap<String, List<String>> mapGlobal = new ConcurrentHashMap<>();
// ...
mapAdded.entrySet().parallelStream().forEach(e -> mapGlobal.merge(e.getKey(), e.getValue(), (v1, v2) -> {
Set<String> set = new TreeSet<>(v1);
set.addAll(v2);
return new ArrayList<>(set);
}));
我有一个简单的api请求,它向一个对象返回一个可观察的对象,该对象中有一组项,每个项中都有一个链接。因此,我想在当前异步流中直接获取链接后面的数据,但我收到一个CORS错误,错误是: 这是否可能与我当前的函数?还是我误解了一些基本概念?
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。 解决方案 假如你有如下两个字典: a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } 现在假设你必须在两个字典中执行查找操作(比如先从 a 中找,如果找不到再在 b 中找)。 一个非常简单的解决方案就是使用 collections 模块中的
我有一个列为col1、col2、col3的数据帧。col3是下面定义的映射[String,String] 我按col1、col2进行分组,并使用collect_list进行聚合,以获得映射数组并存储在col4中。 然而,我希望将col4作为一个单独的映射,并将所有映射合并。目前我有: 预期输出 使用udf是否理想? 感谢您的帮助。谢谢
假设我有一个类的,每个类都有一个。 中的键是时间戳,值是分数。 我试图创建一个,它可以组合所有对象的地图,并输出带有唯一时间戳(Thes)和平均分数的。 我有这个代码,但它给我所有分数的总和,而不是平均值(类没有平均值方法)。 我想这可能不是一个简单的问题,所以在一个单一的中解决,所以一个带有唯一时间戳的和所有分数的的输出也可以。然后我可以自己计算平均值。 它它可能吗?
本文向大家介绍Python如何合并多个字典或映射,包括了Python如何合并多个字典或映射的使用技巧和注意事项,需要的朋友参考一下 问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。 解决方案 加入你有如下两个字典: 现在假设你必须在两个字典中执行查找操作(比如先从a中找,如果找不到再在b中找)。一个非常简单扼解决方案就是使用co