import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;@Slf4j
public class ListUtils {/***  lambda表达式对两个List进行循环,根据符合条件,进行相关的赋值操作并返回这个对象集合* @param sourceList   待设置源列表* @param srcEqualProp   源对象条件判断属性名* @param srcSetProp     源对象待设置属性名* @param targetList     资源提供者列表* @param tarEqualProp   对象条件判断参数名* @param tarGetProp     待获取对象属性名* @param <T>* @param <U>* @return*/public static <T,U>List<T> setListByEqualObjProperty(List<T> sourceList, String srcEqualProp, String srcSetProp,List<U> targetList, String tarEqualProp, String tarGetProp){List<T> resultList = Lists.newArrayList();resultList = sourceList.stream().map(sur-> targetList.stream().filter(tar -> Objects.equals(getValueByPropName(sur, srcEqualProp), getValueByPropName(tar, tarEqualProp))).findFirst().map(tar -> {setValueByPropName(sur, srcSetProp, getValueByPropName(tar, tarGetProp));return sur;} ).orElse(null)).collect(Collectors.toList());return  resultList;}/***  通过遍历两个List中按id属性相等的归结到resultList中* @param oneList  源list 1* @param twoList  源list 2* @param equalKeyName 相等的map键值*/public static List<Map<Object, Object>> compareListHitData(List<Map<Object, Object>> oneList, List<Map<Object, Object>> twoList, Object equalKeyName) {List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream().filter(m -> Objects.equals(m.get(equalKeyName),map.get(equalKeyName))).findFirst().map(m -> {map.putAll(m);return map;}).orElse(null)).filter(Objects::nonNull).collect(Collectors.toList());return resultList;}// 通过属性获取传入对象的指定属性的值public static <T> T getValueByPropName(Object object, String propName) {T value = null;try {// 通过属性获取对象的属性Field field = object.getClass().getDeclaredField(propName);// 对象的属性的访问权限设置为可访问field.setAccessible(true);// 获取属性的对应的值value = (T)field.get(object);} catch (Exception e) {return null;}return value;}// 通过属性设置传入对象的指定属性的值public static <U> void setValueByPropName(Object object, String propName, U updateValue) {try {// 通过属性获取对象的属性Field field = object.getClass().getDeclaredField(propName);// 对象的属性的访问权限设置为可访问field.setAccessible(true);// 设置属性的对应的值field.set(object, updateValue);} catch (Exception e) {log.error("setValueByPropName.error {}", propName, e);}}@Data
public class Girl {private String id;private String name;
}@Data
public class SchoolBoy {private String girlId;private String id;private String name;private Integer age;private String girlName;
}public static void main(String[] args) {List<SchoolBoy> schoolBoys = new ArrayList<>(3);SchoolBoy boy1 = new SchoolBoy();boy1.setGirlId("1");boy1.setId("10");boy1.setName("小明");SchoolBoy boy2 = new SchoolBoy();boy2.setGirlId("2");boy2.setId("11");boy2.setName("小豪");SchoolBoy boy3 = new SchoolBoy();boy3.setGirlId("3");boy3.setId("12");boy3.setName("小白");schoolBoys.add(boy1);schoolBoys.add(boy2);schoolBoys.add(boy3);List<Girl> girls = new ArrayList<>(3);Girl girl1 = new Girl();girl1.setId("1");girl1.setName("小英");Girl girl2 = new Girl();girl2.setId("2");girl2.setName("小美");Girl girl3 = new Girl();girl3.setId("3");girl3.setName("小花");girls.add(girl1);girls.add(girl2);girls.add(girl3);List<SchoolBoy> list = ListUtils.setListByEqualObjProperty(schoolBoys,"girlId", "girlName",girls, "id", "name");System.out.println(list.toString());List<Map<Object, Object>> oneList = new ArrayList<>();Map<Object, Object> oneMap = new HashMap<>();oneMap.put("id", 111);oneMap.put("userName", "林飞");Map<Object, Object> twoMap = new HashMap<>();twoMap.put("id", 222);twoMap.put("userName", "Hejinrong");oneList.add(oneMap);oneList.add(twoMap);List<Map<Object, Object>> twoList = new ArrayList<>();Map<Object, Object> threeMap = new HashMap<>();threeMap.put("id", 111);threeMap.put("userName", "林飞");Map<Object, Object> fourMap = new HashMap<>();fourMap.put("id", 333);fourMap.put("userName", "Hejinrong");twoList.add(threeMap);twoList.add(fourMap);List<Map<Object, Object>> resultList = compareListHitData(oneList, twoList, "id");System.out.println(resultList);System.out.println("Max memory =" + Runtime.getRuntime().maxMemory()/(double)1024/1024 +"M");System.out.println("Total memory= " + Runtime.getRuntime().totalMemory()/(double)1024/1024 +"M");}}

java8 操作两个list 根据id匹配 进行赋值相关推荐

  1. 基因 ID 匹配利器

    一.背景 对于每个生物信息分析的人来说,ID 匹配(映射)是一项非常常见,但又很繁琐的任务.假设,我们有一个来自上游分析的 gene symbol 或报告的 ID 列表,然后我们的下一个分析却需要使用 ...

  2. OpenNI2下简单操作两个体感设备(Xtion与Kinect for Xbox 360)

    主要内容: 设备与驱动准备 代码演示 总结 一.设备与驱动准备 最近忙着写论文,已好长时间没瞎写了,这两天偶然看到一篇有关OpenNI2操作两个体感设备的文章,自己复制粘贴运行下看了效果挺好的,所以我 ...

  3. js取出两个数组中id相同的对象

    现在是要将两个不同的数组中进行匹配,并取出两个数组中id相同的对象放入一个新的数组 数组如图所示 代码 const newList = this.objList.filter((item) => ...

  4. MyBatis在insert插入操作时返回主键ID

    数据库为MySql时:  <insert id="insert" parameterType="com.test.User" keyProperty=&q ...

  5. 华为系统里的计算机,一个屏幕操作两个系统 让你的手机装进华为MateBook 14电脑里...

    2020春节一过全国掀起了一股在线办公.在线学习的热潮.笔者也由于特殊原因,无法回到工作室办公,只好用身边的华为MateBook 14 2020款居家远程办公. 也正是在这段日子,让笔者充分体会到华为 ...

  6. flutter 布局 Stack Positioned的混合操作 两个组件Container重叠 构建背景圆角操作 类似css的relative

    flutter 布局 Stack Positioned的混合操作 两个组件Container重叠 构建背景圆角操作 首先看一下需求 需要在这里加一个背景圆角,涉及到两个组件Container的重叠 我 ...

  7. C语言函数fscanf()(从流 stream 读取格式化输入)(如果成功,返回成功匹配和赋值的个数;否则返回EOF)(分隔符:space、Tab、Enter)

    C 标准库 - <stdio.h> 文章目录 描述 声明 参数 返回值 实例1 实例2 实例3 注意(分隔符:space.Tab.Enter) 换行格式化输入示例(暂时只能弄英文字符,中文 ...

  8. Java8使用stream操作两个list根据某字段匹配再对其中一个list进行赋值

    import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.F ...

  9. python两个excel字段模糊匹配_Python对两个Excel操作

    简介 现在有个需求,我们根据需要 data.xlsx 中某些单元格的内容来查找 find.xlsx 中的某些內容. 数据内容(为了数据安全,所有数据均已模糊处理) data.xlsx内容: find. ...

最新文章

  1. PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑
  2. C# SortedDictionary以及SortedList的浅谈
  3. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数
  4. Eclipse安装Database Development插件。
  5. 视觉SLAM总结——LSD SLAM中关键知识点总结
  6. 有幸见到一朵花的绽放
  7. 1、mybatis是什么?为什么要用mybatis?
  8. vue-router区分hash模式和history模式
  9. 数据中心智能化运维之路
  10. 说明 RISC 和 CISC 指令系统的区别?
  11. 北风设计模式课程---外观模式、代理模式和中介者模式的区别
  12. matlab coefs,MATLAB小波分析工具箱常用函数
  13. Cmake入门(1)cmake安装,创建第一个工程,引入头文件
  14. JAVA ZIP解压出现不可预料的压缩文件末端
  15. QPS、TPS、吞吐量含义
  16. 两边双虚线是什么意思_两条双黄虚线什么意思
  17. 北大AI公开课第六课--自动驾驶与人工智能by百度陈竞凯
  18. 我是如何让公司后台管理系统焕然一新的(上) -性能优化
  19. maven项目创建出错Could not calculate buil d plan:Plugin org.apache.maven.plugins 避坑
  20. 做smart报表的一般步骤

热门文章

  1. python 矩阵切片_python矩阵的切片(或截取)
  2. 2021年全球豌豆蛋白和豌豆蛋白粉行业调研及趋势分析报告
  3. duilib 子窗口位置_duilib入门简明教程 -- 界面布局(9)
  4. htc管理root授权,htc手机怎么root权限获取
  5. Python3.7.6 Django项目上传部署(一)
  6. vue2.0运行导入的项目出现node:events:491 throw er; // Unhandled ‘error‘ event错误提示解决办法
  7. python操作postgresql
  8. Mongodb启动失败问题解决
  9. 刚看到的,争吵或许为了这个
  10. 苹果8p电池多少毫安的_苹果手机电池很不耐用,一般多久需要换一次?换一次的费用多少?...