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

Java 8 - Compare multiple fields in different order using Comparator

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

Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> p.getAge())
          .reversed()
          .thenComparing(p -> p.getCity());

使用Comparator.reverseOrder():

.thenComparing(Person::getAge, Comparator.reverseOrder())

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

.thenComparing((p1, p2) -> Integer.compare(p2.getAge(), p1.getAge()))

或者

.thenComparing(Comparator.comparingInt(Person::getAge).reversed())

不需要使用方法Comparator::reverse。既然要根据整数进行逆序比较,那么只要将年龄-p.getAge()取反,就会降序排列:

Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> -p.getAge())
          .thenComparing(p -> p.getCity());