Comparator.comparing嵌套对象倒序以及多重条件排序
一、嵌套对象倒序的正确书写方式
描述:对象A内部封装对象B,根据B的字段做倒排
Comparator<User> ageDescCom = Comparator.comparing(temp -> temp.getKid().getAge()).reversed();//报错:temp为object
Comparator<User> ageDescCom = Comparator.comparing((User temp) -> temp.getKid().getAge()).reversed();//有效
Comparator<User> ageDescCom = Comparator.comparing(temp -> temp.getKid().getAge(), Comparator.reverseOrder());//有效
测试代码:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User extends BaseEntity {String nickname;String avatar;Integer gender;Integer age;User kid;@Overridepublic User instance() {return new User();}
}public class ComparatorTest {@Testpublic void test() {User kid = User.builder().age(1).build();User kid1 = User.builder().age(2).build();User kid2 = User.builder().age(3).build();User kid3 = User.builder().age(4).build();User kid4 = User.builder().age(5).build();User user = User.builder().kid(kid).build();User user1 = User.builder().kid(kid1).build();User user2 = User.builder().kid(kid2).build();User user3 = User.builder().kid(kid3).build();User user4 = User.builder().kid(kid4).build();List<User> list = Arrays.asList(user2,user3,user1,user,user4);System.out.println(list);//Comparator<User> ageDescCom = Comparator.comparing(temp -> temp.getKid().getAge()).reversed();//报错:temp为object//Comparator<User> ageDescCom = Comparator.comparing((User temp) -> temp.getKid().getAge()).reversed();//有效//Comparator<User> ageDescCom = Comparator.comparing(temp -> temp.getKid().getAge(), Comparator.reverseOrder());//有效list = list.stream().sorted(ageDescCom).collect(Collectors.toList());System.out.println(list);}}
二、多层/嵌套/多重条件排序
描述:如:先按照年龄正序,同年龄按照体重倒序。
Comparator<XXX> A = Comparator.comparing(XXX::getAge).reversed(); Comparator<XXX> B = Comparator.comparing(XXX::getWeight); Comparator<XXX> C = A.thenComparing(B);
测试代码:
public class ComparatorTest {@Testpublic void test2() {User kid = User.builder().age(4).weight(1).build();User kid1 = User.builder().age(4).weight(2).build();User kid2 = User.builder().age(4).weight(3).build();User kid3 = User.builder().age(4).weight(4).build();User kid4 = User.builder().age(4).weight(5).build();User user = User.builder().age(20).kid(kid).build();User user1 = User.builder().age(20).kid(kid1).build();User user2 = User.builder().age(20).kid(kid2).build();User user3 = User.builder().age(20).kid(kid3).build();User user4 = User.builder().age(20).kid(kid4).build();List<User> list = Arrays.asList(user2,user3,user1,user,user4);System.out.println(list);Comparator<User> userAgeAscCom = Comparator.comparing(User::getAge);Comparator<User> kidAgeAscCom = Comparator.comparing(User::getAge);Comparator<User> kidWeightDescCom = Comparator.comparing(temp -> temp.getKid().getWeight(), Comparator.reverseOrder());Comparator<User> userAgeAscThenKidWeightDescCom = userAgeAscCom.thenComparing(kidWeightDescCom);//父母年龄正序后小孩体重倒序Comparator<User> kidAgeAscThenKidWeightDescCom = kidAgeAscCom.thenComparing(kidWeightDescCom);//小孩年龄正序后小孩体重倒序list = list.stream().sorted(userAgeAscThenKidWeightDescCom).collect(Collectors.toList());System.out.println(list);list = list.stream().sorted(kidAgeAscThenKidWeightDescCom).collect(Collectors.toList());System.out.println(list);}}
Comparator.comparing嵌套对象倒序以及多重条件排序相关推荐
- 【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
Java Comparator.comparing | 提取对象属性,按照指定规则排序 Comparator.comparing Comparator.comparingInt Comparator. ...
- Swift之深入解析如何进行多重条件排序
一.前言 在一个条件或者单个属性上进行排序非常简单, Swift 本身就有相关的功能. 如下所示,对 int 数组进行排序的例子: let numbers = [3, 5, 6, 1, 8, 2] l ...
- 数组多重筛选条件排序方法
根据一个或者多个属性对数组进行排序,支持嵌套的属性.而且可以在每个条件中指定排序的方向,并支持传入比较函数. 安装 采用 npm 安装: $ npm install --save arr-sort 复 ...
- Nested嵌套对象类型还挺实用
上一篇文章中,我们学习了Join类型的父子文档,今天继续学习一下嵌套文档,毕竟嵌套文档也是Elasticsearch推荐的,首先我们看下面这条语句 PUT word_document/_doc/1 { ...
- python中多重if语句用法_python-循环语句的简单条件语句、多重条件语句和嵌套条件语句编写...
1. 简单if-else语句 例1:要求用户输入两个数,计算两数的和.如果这两个数的和大于100,则输出"两数和大于100",否则输出"两数和小于100". 程 ...
- 数组中数组/嵌套对象数组的遍历操作
数组中数组/嵌套对象数组的遍历操作 总结以下方法 1.for i in arr (推荐) 2.arr.foreach(item=>{ item.foreach(item2=>{ } ) } ...
- 【Elasticsearch】如何管理 Elasticsearch 文档中的嵌套对象
本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载.有问题可以先私聊我,本人每天都在线,会帮助需要的人. 文章目录 1.概述 2.先决条件 3.创建索引 4. ...
- 将list集合中按照某个字段排序(从大到小),然后将list中的对象倒序
需求: 查询数据库的到多条据,将每一行数据相加求和,得到sum,在jsp中跟据sum总和排序. 首先,我是用Page<Analysis> page 去接受返回值,在controller层 ...
- Comparator.comparing的使用
这个方法的作用就是根据对象某个属性来进行排序. 我们看一下一般我们使用的方法,和使用Comparator.comparing改进的方法. Collections.sort(tickets, (a, b ...
最新文章
- 腾讯云无法绑定公网IP问题解释与解决方案。
- SolrQuery的使用
- zip(), dict(), itertools.repeat(), list(迭代器)
- ***一般如何***服务器
- re.compile
- 拥有这个证书的医务人员恭喜了,国家正式通知……
- bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草(完全背包)
- maven3常用命令、java项目搭建、web项目搭建详细图解
- 罗盘时钟制作代码_抖音超火的姓氏罗盘壁纸,安卓和苹果都能做
- Adobe Acrobat如何快速将PDF文档的书签修改为“承前缩放”——PDF增效插件AutoBookmark
- C#WPF制作仿QQ截图工具
- 项目管理工具和技术——PERT图和甘特图
- bzoj1627 / P2873 [USACO07DEC]泥水坑Mud Puddles
- UVA 10673 扩展欧几里得
- Android后台切回到应用显示广告页
- 毕业旅行 | 用一场纽约5日游告别难忘青葱岁月
- Jquery 回到顶部
- DDR3不同型号不同位宽仿真记录
- 【关于NI CAN USB-8473在实际应用中的案例分析】
- 我要的精致:人间有茶是清欢