首页 > 其他分享 >合并两个list对象集合并排序

合并两个list对象集合并排序

时间:2022-10-04 17:05:14浏览次数:81  
标签:getAge Comparator UserDetail list 拼接 集合 userDetails 排序 userDetail

List对象合并后进行排序

业务场景

用户相关字段数量较多时,会进行分表,用相同的id进行关联,而后进行数据查询时,需要将两张或者多张表的数据进行拼接

思路:将其中一个list1转换为map,遍历list2,通过list2对象的属性获取map值,进行拼接

实现举例

需求

现在需要将以下两个列表根据ID进行合并,然后根据年龄排序

合并两个list对象集合并排序_sed

实现

  1. 将其中一个​​list​​​转化成​​map​​​,以​​id​​​为key值,对象为value,此处选用​​userExtend​
//以id为key值,将list转换为Map
Map<String, UserExtend> userExtendMap = userExtends.stream()
.collect(Collectors.toMap(UserExtend::getId, userExtend -> userExtend));

合并两个list对象集合并排序_数据_02

  1. 通过流的方式拼接对象
//通过流的方式拼接两个对象成为新对象
List<UserDetail> userDetails = userList.stream().map(a->{
UserDetail userDetail = new UserDetail();
userDetail.setId(a.getId());
userDetail.setName(a.getName());
userDetail.setAge(a.getAge());
userDetail.setWork(userExtendMap.get(a.getId()).getWork());
return userDetail;
}).collect(Collectors.toList());
  1. 拼接完成

合并两个list对象集合并排序_sed_03

  1. 使用Comparator进行排序
//查看拼接后的对象
System.out.println(userDetails);

//方式一:使用比较器进行升序比较比较
Collections.sort(userDetails, new Comparator<UserDetail>() {
@Override
public int compare(UserDetail o1, UserDetail o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
System.out.println(userDetails);

//方式二:以流的方式进行降序排序,去掉reversed()则为升序
List<UserDetail> newUserDetails = userDetails.stream().sorted(Comparator.comparing(UserDetail::getAge,
Comparator.nullsFirst(Integer::compareTo)).reversed()).collect(Collectors.toList());
System.out.println(newUserDetails);

合并两个list对象集合并排序_数据_04

​Comparator参考博客​

代码Demo

链接:​​https://pan.baidu.com/s/1g6jWbA5Ocb93C8qqqsx_Ig​​ 提取码:cfxy



标签:getAge,Comparator,UserDetail,list,拼接,集合,userDetails,排序,userDetail
From: https://blog.51cto.com/u_15489116/5731364

相关文章

  • 冒泡排序算法
    冒泡排序算法(BubbleSort)算法是一种简单的排序算法,它在重复访问要排序的元素列时,会依次比较相邻的两个元素,如果左边的元素大于后边的元素,就将二者交换位置,如此重复,......
  • 本周回顾:列表、字典、集合、元祖、垃圾回收机制、循环、输出格式
    本周回顾重点大概列表字典集合元祖垃圾回收机制循环输出格式目录本周回顾重点大概本周回顾详细列表字典集合元祖垃圾回收机制循环and分支结构本周回顾详细列表......
  • 排序只要按顺序走就一定没问题
    只要遵循第一个先和第二个比较,第二个在和第三个比较,就不用再第一个和第三个比较了三个都比:#include<iostream>#include<cmath>#include<algorithm>usingnamespac......
  • 快速排序-C语言实现
    快速排序排序思想1.选定Pivot中心轴2.将大于Pivot的数字放在Pivot的右边3.将小于Pivot的数字放在Pivot的左边4.分别对左右子序列(此时有左右2个子表),重复前三步操......
  • Collections之Arraylist源码解读(四)
    ......
  • 排序的基本复杂度
      .排序算法时间复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中......
  • [Oracle] LeetCode 141 Linked List Cycle 判环
    Givenhead,theheadofalinkedlist,determineifthelinkedlisthasacycleinit.Thereisacycleinalinkedlistifthereissomenodeinthelistthat......
  • java---冒泡排序和稀疏数组的学习
    一.冒泡排序1.冒泡排序无疑是最为出名的排序算法,总共有8大排序2.冒泡代码相当简单,两层循环,两层冒泡轮数,里面依次比较3.我们看到的嵌套循环,应该立马就可以的出这个算法的......
  • Python语法之集合
    集合是无序元素的集合,集合中的元素不可重复,并且创建完成后,其中的元素不可更改。但是整个集合是可以更改的,我们可以向其增加元素,也可以从中删除元素。也就是说,我们无法修改......
  • LeetCode 1367. Linked List in Binary Tree
    原题链接在这里:https://leetcode.com/problems/linked-list-in-binary-tree/题目:Givenabinarytree root anda linkedlistwith head asthefirstnode. Ret......