首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java 8-使用比较器以不同的顺序比较多个字段

Java 8-使用比较器以不同的顺序比较多个字段
EN

Stack Overflow用户
提问于 2018-07-28 04:54:08
回答 2查看 9.1K关注 0票数 9

我喜欢使用Java8 Comparator根据三个属性对对象的List进行排序。要求按此顺序排序-名称升序,年龄降序,城市升序。如果我在` `Age上使用reversed(),它也会颠倒之前排序的条目。下面是我尝试过的:

代码语言:javascript
复制
Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> p.getAge())
          .reversed()
          .thenComparing(p -> p.getCity());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-28 04:58:09

使用Comparator.reverseOrder()

代码语言:javascript
复制
.thenComparing(Person::getAge, Comparator.reverseOrder())

如果你想避免自动装箱,你可以这样做

代码语言:javascript
复制
.thenComparing((p1, p2) -> Integer.compare(p2.getAge(), p1.getAge()))

代码语言:javascript
复制
.thenComparing(Comparator.comparingInt(Person::getAge).reversed())
票数 23
EN

Stack Overflow用户

发布于 2018-07-28 05:05:32

不需要使用Comparator::reverse方法。由于您希望根据整数反转比较,因此只需对年龄-p.getAge()求反,它将按降序排序:

代码语言:javascript
复制
Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> -p.getAge())
          .thenComparing(p -> p.getCity());
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51565422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档