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());
我喜欢使用 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());