Comparator.comparing(Person::g
时间: 2024-09-24 16:12:58 浏览: 35
Comparator.comparing(Person::getAge) 是 Java 中 Comparator 接口的一个静态方法,用于创建一个比较器,它按照 Person 对象的年龄属性(getAge() 方法返回的值)来进行排序。在 Lambda 表达式的形式下,`Person::getAge` 指定了比较的规则,即按每个 Person 实例的 age 属性进行比较。这个方法常用于 Stream API 的 sort 或者 sorted 排序操作,以便对集合进行基于年龄的升序或降序排列。
例如,在对一个包含 Person 对象的列表进行排序时,可以这样做:
```java
List<Person> people = ...;
people.sort(Comparator.comparing(Person::getAge));
```
这将按照 Person 的年龄对列表进行自然顺序的升序排序。如果你想降序排序,则可以添加 `.reversed()`:
```java
people.sort(Comparator.comparing(Person::getAge).reversed());
```
相关问题
Collections.sort(persons, Comparator.comparing(Person::getName)); 这个排序的效率高吗
Collections.sort(persons, Comparator.comparing(Person::getName)) 这种方式的排序效率是高的,它使用了Java 8中的函数式编程特性,通过Comparator.comparing()方法来指定要排序的字段,底层使用快排实现,时间复杂度为O(nlogn)。
在Java 8之前,我们通常使用实现Comparable接口或者传入一个Comparator对象的方式来对一个List进行排序。而这种方式需要自己实现比较方法,增加了代码量和阅读难度。而使用Comparator.comparing()方法,可以简化代码,更易于理解和维护。
另外,Java 8中的函数式编程特性还提供了并行排序的方法,可以通过stream()方法将List转化为一个Stream对象,再使用parallel()方法来实现并行排序,提高排序效率。例如:
```java
List<Person> persons = new ArrayList<>();
// 假设persons中已经有多个Person对象
persons.parallelStream().sorted(Comparator.comparing(Person::getName)).collect(Collectors.toList());
```
上述代码中,使用了parallelStream()方法实现并行排序,可以根据实际情况选择使用。
Comparator.comparingInt(Person::getAge)
Comparator.comparingInt(Person::getAge)是一种Comparator的定义方式,用于按照Person对象的年龄属性进行排序。它可以替代Comparator.comparing(Person::getAge),并提供更高效的比较方式,因为comparingInt方法针对基本数据类型int进行比较,而comparing方法则针对包装类Integer进行比较。
阅读全文