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

Vin*_*Pro 4 java list comparator java-8

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

Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> p.getAge())
          .reversed()
          .thenComparing(p -> p.getCity());
Run Code Online (Sandbox Code Playgroud)

shm*_*sel 14

用途Comparator.reverseOrder():

.thenComparing(Person::getAge, Comparator.reverseOrder())
Run Code Online (Sandbox Code Playgroud)

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

.thenComparing((p1, p2) -> Integer.compare(p2.getAge(), p1.getAge()))
Run Code Online (Sandbox Code Playgroud)

要么

.thenComparing(Comparator.comparingInt(Person::getAge).reversed())
Run Code Online (Sandbox Code Playgroud)

  • @YCF_L`alverse()`反转整个前一个链. (4认同)

Nik*_*las 6

没有必要使用该方法Comparator::reverse.由于您希望基于整数反转比较,只需取消年龄-p.getAge(),它将按降序排序:

Comparator.comparing((Person p) -> p.getName())
          .thenComparingInt(p -> -p.getAge())
          .thenComparing(p -> p.getCity());
Run Code Online (Sandbox Code Playgroud)

  • 不错的...除非你碰巧是-2147483648岁.:P (5认同)