一、嵌套对象倒序的正确书写方式

描述:对象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嵌套对象倒序以及多重条件排序相关推荐

  1. 【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序

    Java Comparator.comparing | 提取对象属性,按照指定规则排序 Comparator.comparing Comparator.comparingInt Comparator. ...

  2. Swift之深入解析如何进行多重条件排序

    一.前言 在一个条件或者单个属性上进行排序非常简单, Swift 本身就有相关的功能. 如下所示,对 int 数组进行排序的例子: let numbers = [3, 5, 6, 1, 8, 2] l ...

  3. 数组多重筛选条件排序方法

    根据一个或者多个属性对数组进行排序,支持嵌套的属性.而且可以在每个条件中指定排序的方向,并支持传入比较函数. 安装 采用 npm 安装: $ npm install --save arr-sort 复 ...

  4. Nested嵌套对象类型还挺实用

    上一篇文章中,我们学习了Join类型的父子文档,今天继续学习一下嵌套文档,毕竟嵌套文档也是Elasticsearch推荐的,首先我们看下面这条语句 PUT word_document/_doc/1 { ...

  5. python中多重if语句用法_python-循环语句的简单条件语句、多重条件语句和嵌套条件语句编写...

    1. 简单if-else语句 例1:要求用户输入两个数,计算两数的和.如果这两个数的和大于100,则输出"两数和大于100",否则输出"两数和小于100". 程 ...

  6. 数组中数组/嵌套对象数组的遍历操作

    数组中数组/嵌套对象数组的遍历操作 总结以下方法 1.for i in arr (推荐) 2.arr.foreach(item=>{ item.foreach(item2=>{ } ) } ...

  7. 【Elasticsearch】如何管理 Elasticsearch 文档中的嵌套对象

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载.有问题可以先私聊我,本人每天都在线,会帮助需要的人. 文章目录 1.概述 2.先决条件 3.创建索引 4. ...

  8. 将list集合中按照某个字段排序(从大到小),然后将list中的对象倒序

    需求: 查询数据库的到多条据,将每一行数据相加求和,得到sum,在jsp中跟据sum总和排序. 首先,我是用Page<Analysis> page  去接受返回值,在controller层 ...

  9. Comparator.comparing的使用

    这个方法的作用就是根据对象某个属性来进行排序. 我们看一下一般我们使用的方法,和使用Comparator.comparing改进的方法. Collections.sort(tickets, (a, b ...

最新文章

  1. 腾讯云无法绑定公网IP问题解释与解决方案。
  2. SolrQuery的使用
  3. zip(), dict(), itertools.repeat(), list(迭代器)
  4. ***一般如何***服务器
  5. re.compile
  6. 拥有这个证书的医务人员恭喜了,国家正式通知……
  7. bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草(完全背包)
  8. maven3常用命令、java项目搭建、web项目搭建详细图解
  9. 罗盘时钟制作代码_抖音超火的姓氏罗盘壁纸,安卓和苹果都能做
  10. Adobe Acrobat如何快速将PDF文档的书签修改为“承前缩放”——PDF增效插件AutoBookmark
  11. C#WPF制作仿QQ截图工具
  12. 项目管理工具和技术——PERT图和甘特图
  13. bzoj1627 / P2873 [USACO07DEC]泥水坑Mud Puddles
  14. UVA 10673 扩展欧几里得
  15. Android后台切回到应用显示广告页
  16. 毕业旅行 | 用一场纽约5日游告别难忘青葱岁月
  17. Jquery 回到顶部
  18. DDR3不同型号不同位宽仿真记录
  19. 【关于NI CAN USB-8473在实际应用中的案例分析】
  20. 我要的精致:人间有茶是清欢

热门文章

  1. redhat 7配置ftp server
  2. spoj p104 Matrix-Tree定理
  3. 关于不能访问腾讯云服务器tomcat的问题解决
  4. Leetcode初学——跳跃游戏
  5. 我的iphone6退货之路
  6. 严重: 异常将上下文初始化事件发送到类的侦听器实例.[org.springframework.web.co
  7. VBA小模板:一个普通随机抽奖,需要模拟多轮用VBA怎么做?
  8. 非此即彼的逻辑错误_英语逻辑错误一览
  9. Kotlin-面向对象
  10. go-kit微服务,服务注册与发现,负载均衡(二)