使用Java8的Stream对两个 List 遍历匹配数据的优化处理
使用场景,有两个List<Map<String,Object>>集合,第一个集合的所有元素都是需要保留的。
第一个集合的值为:
{name=张三丰1, id=1}
{name=张三丰2, id=2}
{name=张三丰3, id=3}
{name=张三丰4, id=4}
{name=张三丰5, id=5}
{name=张三丰6, id=6}
{name=张三丰7, id=7}
{name=张三丰8, id=8}
第二个集合的值为:
{grade=61, id=1}
{grade=62, id=2}
{grade=63, id=3}
{grade=64, id=4}
需要根据两个集合中id值相同,就把第二个集合中的grade值赋给第一个集合,如果不匹配,默认grade值为0
结果是这样:
{grade=61, name=张三丰1, id=1}
{grade=62, name=张三丰2, id=2}
{grade=63, name=张三丰3, id=3}
{grade=64, name=张三丰4, id=4}
{grade=0, name=张三丰5, id=5}
{grade=0, name=张三丰6, id=6}
{grade=0, name=张三丰7, id=7}
{grade=0, name=张三丰8, id=8}
具体实现代码:
@Test
public void demo01(){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for (int i=1;i<9;i++){
Map<String,Object> map = new HashMap<>();
map.put("id",i);
map.put("name","张三丰"+i);
list.add(map);
}
Stream<Map<String, Object>> s1 = list.stream();
list.stream().forEach(map-> System.out.println(map));
List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();
for (int i=1;i<5;i++){
Map<String,Object> map2 = new HashMap<>();
map2.put("id",i);
map2.put("grade",i+60);
list2.add(map2);
}
list2.stream().forEach(s-> System.out.println(s));
/**
* List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream()
* .filter(m -> Objects.equals(m.get("id"), map.get("id")))
* .findFirst().map(m -> {
* map.putAll(m);
* map.put("grade",90);
* return map;
* }).orElse(null))
* .filter(Objects::nonNull).collect(Collectors.toList());
*/
/* List<Map<String, Object>> resultList2 = list.stream().map(m->{
m.put("grade",0);
for (int i=0;i<list2.size();i++){
if(m.get("id").equals(list2.get(i).get("id"))){
m.put("grade",list2.get(i).get("grade"));
break;
}
}
return m;
}).collect(Collectors.toList());*/
List<Map<String, Object>> resultList2 = list.stream().map(m->{
m.put("grade",0);
list2.stream().filter(m2->Objects.equals(m.get("id"), m2.get("id"))).forEach(s-> m.put("grade",s.get("grade")));
return m;
}).collect(Collectors.toList());
resultList2.stream().forEach(s-> System.out.println(s));
}
看到最后,喜欢的小伙伴就不要吝啬的帮忙扫码关注一下了,谢谢。
微信扫一扫:关注我个人订阅号“猿小飞”,更多精彩文章在这里及时发布:
原文作者:猿小飞
原文地址: https://blog.csdn.net/u011442726/article/details/96770773
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/u011442726/article/details/96770773
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章