子类型比较器单衬垫问题

Sub Type Comparator One Liner Issue

提问人:Thomas Mathew 提问时间:10/17/2023 更新时间:10/17/2023 访问量:35

问:

为什么我需要一个临时变量,因为这里需要 personAgentComparator 并调用 reversed()?

public class SubTypeComparatorIssue {

  public void sortAgeFromOldToYoung(List<Person> persons) {
    //persons.sort(Comparator.comparing(person -> person.age).reversed());
      Comparator<Person> personAgeComparator = Comparator.comparing(person -> person.age);
      persons.sort(personAgeComparator.reversed());
  }
}

class Person {
  int age;
}

如何将比较器作为单行进行排序和反转?我在 lambda 表达式中遇到错误,当 curing 该注释行时。如果没有添加reversed(),我什至不会收到该错误!因此,现在用那 temporary 做了两行,并在调用 .person.agereversed()personAgentComparatorreversed()sort()

基本上,我如何让单线机来完成整个操作?

我希望对这一行进行更正,将其作为单行代码,以使列表按人的年龄反向排序。persons

persons.sort(Comparator.comparing(person -> person.age).reversed());
Java 列表 排序反向 单行

评论

1赞 Mark Rotteveel 10/17/2023
IIRC,问题在于类型推断将在方法调用之间分解。我认为如果你使用它会起作用persons.sort(Comparator.<Person>comparing(person -> person.age).reversed());
1赞 Holger 10/17/2023
或者使用方法而不是访问字段,persons.sort(Comparator.comparingInt(Person::getAge).reversed());
1赞 Rifat Rubayatul Islam 10/17/2023
你也可以这样做persons.sort(Comparator.comparing((Person person) -> person.age).reversed());
1赞 Holger 10/17/2023
第四个选项:.persons.sort(Collections.reverseOrder(Comparator.comparing(person -> person.age)));

答:

0赞 bhagwan 10/17/2023 #1

使用 lambda 的方法之一

persons.sort((p1, p2) -> Integer.compare(p2.age, p1.age));