两个List合并,List集合中的对象根据某个相同的属性,合并另外属性
- 简介 (Introduction):
- 背景
需要对数据进行拼接,拼接的数据是存在两个不同的表中,但是,拼接后要作为一个对象显示,但是,这样的对象又是多个的. - 结构图
数据库模型
id name 10086 zhangsan 10087 lisi
- 背景
| id | work |
| 10086 | teacher |
| 10087 | programmer |
需要结果
| id | name | work |
| 10086 | zhangsan |
teacher |
| 10087 | lisi |
programmer |
核心
因为是在不同的数据库里,所以不能使用sql联合查询,所以只能采用List封装数据和另一个List封装数据拼接成一个结果集快速上手(Getting Started)
1.创建测试数据

1 private static List<SameOr> getDemo1() {
2
3
4 List<SameOr> sameOrList = new ArrayList<>();
5
6 SameOr sameOr = new SameOr();
7 sameOr.setNumber("10086");
8 sameOr.setName("zhangsan");
9
10 SameOr sameOr2 = new SameOr();
11 sameOr2.setNumber("10087");
12 sameOr2.setName("lisi");
13
14 sameOrList.add(sameOr);
15 sameOrList.add(sameOr2);
16
17 return sameOrList;
18
19 }
1 private static List<SameOr> getDemo2() {
2
3
4 List<SameOr> sameOrList = new ArrayList<>();
5
6 SameOr sameOr = new SameOr();
7 sameOr.setNumber("10086");
8
9 sameOr.setSex("0");
10 sameOr.setWork("programmer");
11
12 SameOr sameOr2 = new SameOr();
13 sameOr2.setNumber("10087");
14 sameOr2.setSex("1");
15 sameOr2.setWork("programmer");
16
17
18 sameOrList.add(sameOr);
19 sameOrList.add(sameOr2);
20
21 return sameOrList;
22
23 }2.创建核心方法
由于业务跑在线程里,所以,不建议(基本不适用)双重for循环,所以,这里采用Map方式
1 private static void getCombineDemo2(List<SameOr> demo1, List<SameOr> demo2) {
2 HashMap<String, SameOr> map = new HashMap<>();
3
4 for (SameOr sameOr : demo1) {
5 map.put(sameOr.getNumber(), sameOr);
6 }
7
8
9 for (SameOr sameOr : demo2) {
10 String sameOrNumber = sameOr.getNumber();
11 SameOr sameOr1 = map.get(sameOrNumber);
12 if (sameOr1 == null) {
13 continue;
14 }
15
16 if (StringUtils.isBlank(sameOr.getName())) {
17 sameOr.setName(sameOr1.getName());
18 }
19
20 if (StringUtils.isBlank(sameOr.getSex())) {
21 sameOr.setSex(sameOr1.getSex());
22 }
23
24 if (StringUtils.isBlank(sameOr.getWork())) {
25 sameOr.setWork(sameOr1.getWork());
26 }
27
28
29 }
30
31 }3、测试结果
1 //两个数组合并成一个
2 List<SameOr> demo1 = getDemo1();
3 List<SameOr> demo2 = getDemo2();
4
5
6 System.out.println("创建第一个数据:"+new Gson().toJson(demo1));
7
8 System.out.println("创建第二个数据:"+new Gson().toJson(demo2));
9
10 getCombineDemo2(demo1, demo2);
11
12 System.out.println("结果集:"+new Gson().toJson(demo2));4、结果展示
创建第一个数据:
1 [
2 {
3 "number":"10086",
4 "name":"zhangsan"
5 },
6 {
7 "number":"10087",
8 "name":"lisi"
9 }
10 ]创建第二个数据:
1 [
2 {
3 "number":"10086",
4 "work":"programmer",
5 "sex":"0"
6 },
7 {
8 "number":"10087",
9 "work":"programmer",
10 "sex":"1"
11 }
12 ]结果集:

1 [
2 {
3 "number":"10086",
4 "name":"zhangsan",
5 "work":"programmer",
6 "sex":"0"
7 },
8 {
9 "number":"10087",
10 "name":"lisi",
11 "work":"programmer",
12 "sex":"1"
13 }
14 ]
环境设置 (Prerequisite):
- 环境
JDK1.8 - 配置
IDEA 2019 存在问题
暂无
- 环境
进阶篇 (Advanced):
研究中 ......
两个List合并,List集合中的对象根据某个相同的属性,合并另外属性的更多相关文章
- List集合中的对象按照某个字段去重实现
package com.liying.banana.user; import java.util.ArrayList; import java.util.Comparator; import java ...
- Java中删除第一个集合中以某某开头的元素,删除第二个集合中以某某结尾的元素,并合并成一个集合
import java.util.ArrayList; import java.util.List; public class Test { public static void main(Strin ...
- 对list集合中的对象进行排序(转载)
原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...
- java中的ArrayList 使得集合中的对象不重复
JAVA中的List接口存放的元素是可以重复的,在这个我重写对象里面的equals()方法,让集合里存放的对象不能重复 首先建一个类,在里面的main()方法中实现 list1中存放的是可以重复对象的 ...
- 如何对List集合中的对象进行按某个属性排序
我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序 当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法: 方法一 让l ...
- Struts2的表单标签还可以为集合中的对象赋值
•Struts 还允许填充 Collection 里的对象, 这常见于需要快速录入批量数据的场合 代码如下 : TestCollectionAction.java package com.atgu ...
- 对List集合中的对象中的某个属性进行排序
今天在项目中遇到的问题,不能在sql中进行order by.所以将数据库中查询出来的集合,在java代码中进行排序 Collections.sort(list, new Comparator<H ...
- List集合中的对象根据属性排序
集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...
- 对list集合中的对象按照对象的某一属性进行排序
/** * 重新对list中的CmsCyUser对象按照最终的票数进行排序 * @param list */ private void reSort(List list) { Object[ ...
- List集合中的对象比较,取出不同对象
今天在做金碟系统与我们系统的对接的时候需要做一个客户同步 在同步时,需要比较对象,对查询出的数据库的数据进行比较 for(int i=0;i<list2.size();i++){ if(! li ...
随机推荐
- #线性dp,排列组合#洛谷 2476 [SCOI2008]着色方案
题目 分析(弱化版) 最暴力的想法就是直接维护每种颜色的个数dp, 弱化版有一个很突出的地方就是 \(c_i\leq 5\), 也就是说可以将相同个数的颜色合并按照个数dp, 设 \(dp[c1][c ...
- #Kruskal,分治#AT4569 Connecting Cities
题目传送门 考虑如何去掉这个绝对值, 换句话说,如何减少边数并且能建出 MST. 在求解偏序问题时,往往会分而治之, 这样原来 \(O(n^2)\) 的做法就能够被优化. 考虑将所有点对半折开, 左半 ...
- #ST表,单调栈#洛谷 5648 Mivik的神力
题目 分析 考虑答案应该是一段单调不下降的序列, 考虑预处理出每个点往后第一个大于这个点的位置, 那么答案应该是左端点到区间内最大的位置以及这个位置到右端点的贡献 那么区间最大的位置可以用ST表做,然 ...
- 小师妹学JavaIO之:文件读取那些事
目录 简介 字符和字节 按字符读取的方式 按字节读取的方式 寻找出错的行数 总结 简介 小师妹最新对java IO中的reader和stream产生了一点点困惑,不知道到底该用哪一个才对,怎么读取文件 ...
- 【直播回顾】OpenHarmony知识赋能六期第五课—WiFi子系统
8月11日晚上19点,知识赋能第六期第五节直播 <OpenHarmony知识赋能-WiFi子系统> ,在OpenHarmony开发者成长计划社群内成功举行. 第六期直播由从事底层基础工作1 ...
- 踩坑指南:入门OpenTenBase之部署篇
引言 OpenTenBase 企业级分布式HTAP开源数据库,具备高扩展性.商业数据库语法兼容.分布式HTAP引擎.多级容灾和多维度资源隔离等能力,成功应用在金融.医疗.航天等行业的核心业务系统. 这 ...
- 本周三晚19:00Hello HarmonyOS应用篇第7课—分布式应用开发
6月15日19:00 Hello HarmonyOS系列应用篇迎来的本系列直播课的最后一课,将会有怎样的精彩呈现呢? 万物互联的时代已经来临,如果你想运用过往的技术,开发一个有"跨设备操 ...
- 直播预告丨Hello HarmonyOS进阶课程第二课——计算机视觉
为了帮助初识HarmonyOS的开发者快速入门,我们曾推出Hello HarmonyOS系列一共5期课程,从最基础的配置IDE和创建Hello World开始,详细介绍HarmonyOS基础.开发环境 ...
- HarmonyOS助力构建“食用菌智慧农场”
原文:https://mp.weixin.qq.com/s/qK4aRY5UKc3GvpLxhwpqww,点击链接查看更多技术内容. [开发者说]栏目是为HarmonyOS开发者提供的展示和分享 ...
- C++ 解引用与函数基础:内存地址、调用方法及声明
C++ 解引用 获取内存地址和值 在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符 & 一起使用).但是,你也可以使用指针来获取变量的值,这可以通过使用 * 运算符(解引 ...