使用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}
具体实现代码:
@Testpublic 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));}
看到最后,喜欢的小伙伴就不要吝啬的帮忙扫码关注一下了,谢谢。
微信扫一扫:关注我个人订阅号“猿小飞”,更多精彩文章在这里及时发布:
使用Java8的Stream对两个 List 遍历匹配数据的优化处理相关推荐
- java8两个list中发数据比较_Java8 Stream对两个 List 遍历匹配数据的优化处理操作
使用场景,有两个List>集合,第一个集合的所有元素都是需要保留的. 第一个集合的值为: {name=张三丰1, id=1} {name=张三丰2, id=2} {name=张三丰3, id=3 ...
- java8 使用stream实现两个list集合合并成一个list集合及List切成多个list
文章目录 java8 合并两个 list<map> java8 合并两个 list<T> 一个list 集合合并去重求和 拆分大list java8 合并两个 list< ...
- Java8使用stream操作两个list根据某字段匹配再对其中一个list进行赋值
import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.F ...
- JAVA8之Stream过滤 - 两个List<T>取变量值相同的数据
直接上代码,觉得有用的大佬点个赞. package com.jackrain.nea.oc.oms.services;import lombok.Builder; import lombok.Data ...
- c++两个文档匹配数据_《搜索和推荐中的深度匹配》——1.2 搜索和推荐中匹配统一性...
Garcia-Molina等[1]指出,搜索和推荐中的根本问题是识别满足用户信息需求的信息对象.还表明搜索(信息检索)和推荐(信息过滤)是同一枚硬币的两个方面,具有很强的联系和相似性[2].图1.1 ...
- Java8 Stream:两万字博文教你玩转集合的筛选、归约、分组、聚合
目录 一.Stream概述 二.Stream 的创建 三.Stream 的中间操作 3.1.筛选(filter/distinct) 3.2.切片(limit/skip) 3.3.映射(map/mapT ...
- java8中stream流解决两个list合并问题
当我们遇到需要将两个list合并成一个list实体的时候,可以使用java8的stream流来解决,以下是我的一个小demo,可供大家参考学习. public ResultDto listBalanc ...
- Java8采用stream、parallelStream迭代的区别
Java8采用stream.parallelStream迭代的区别 我们都知道在Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据.Stream 使用一种类似用 ...
- 玩转Java8的 Stream 之函数式接口
作者:litesky www.jianshu.com/p/2338cabc59e1 函数式接口是伴随着Stream的诞生而出现的,Java8Stream 作为函数式编程的一种具体实现,开发者无需关注怎 ...
最新文章
- 学习string,stringBuffer时遇到的问题
- 稀缺:百分之二的选择
- flash跨域访问解决办法
- 了解下C#由转换二进制所引起的思考
- 前端学习(3098):vue+element今日头条管理-关于富文本编辑器
- bzoj1046(HAOI2007)上升序列
- 一文了解linux内核,一文了解Linux的系统结构
- 【前端】—每日5道面试题打卡(十六)
- WebService接口开发
- 阿昌教你Linux密码忘记后如何重置
- 华为OSPF配置模拟实例
- linux下海康威视MVS以及库的安装
- HTTP状态码滑稽表情包
- 软磁材料种类、特点和应用范围
- 如何解决Css属性text-overflow:ellipsis 不起作用(文本溢出显示省略号)
- 手游联运系统隐藏福利大揭秘
- 安卓开发中获取服务器网络延迟(ping)
- 摩尔定律到摩尔第二定律
- 小福利,用selenium模块爬取qq音乐歌单
- 【点云分割】边界分割对点云分割的监督学习(CBL)