1. Map的merge使用场景:假设当前有个List<bean> dataList ,Map<String, List<bean>> dataMap 。然后我们需要根据将dataList的每个bean根据一定的规则合并到dataMap里面的某个list里面,这个时候使用merge就很方便了。
dataList.forEach(bean ->
dataMap.merge(bean.getId(), new ArrayList<bean>() {{add(bean);}},
(sourceList, list2) -> {
// lambda第一个参数(sourceList)为原始值,第二个参数(list2)为输入的newValue值
sourceList.add(bean);
return sourceList;
})
);
/*
* 假设merge 第一个参数为key
* 当key不存在时,创建key并用第二个参数进行赋值
* 当key存在时,使用第二个参数和原来的参数进行方法处理(第三个参数)重新设置值。
*/
// 或
dataMap = dataList.stream().collect(groupingBy(bean::getId()));
2. 遍历Map的时候 删除元素
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, String> entry=it.next();
int key=entry.getKey();
if(key%2==1){
System.out.println("delete this: "+key+" = "+key);
//map.put(key, "奇数"); //ConcurrentModificationException
//map.remove(key); //ConcurrentModificationException
it.remove(); //OK
}
}
// 参考:https://www.cnblogs.com/wxmdevelop/p/5549548.html
学习参考:
1. https://blog.youkuaiyun.com/baidu_30325009/article/details/92143717
2. https://www.php.cn/java-article-416458.html
本文深入探讨Java Stream API的实用场景,包括如何使用Map的merge方法高效处理数据集合,以及在遍历Map时如何安全地删除元素,避免ConcurrentModificationException异常。
141

被折叠的 条评论
为什么被折叠?



