Comparator.comparing 讲解
时间: 2023-10-13 19:16:14 浏览: 71
Comparator
`Comparator.comparing` 是 Java 8 中的一个静态方法,它允许我们使用一个函数来提取对象的某个关键字,并根据这个关键字进行比较。其签名如下:
```java
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor)
```
其中,`T` 是要比较的对象的类型,`U` 是关键字的类型,`keyExtractor` 是一个从 `T` 映射到 `U` 的函数。
`comparing` 方法返回一个 `Comparator` 对象,可以通过其 `compare` 方法对对象进行比较。具体来说,`compare` 方法会首先根据 `keyExtractor` 函数提取对象的关键字,然后使用关键字的自然顺序(如果它实现了 `Comparable` 接口),或者使用 `U` 类型的默认比较器来比较关键字。
例如,假设我们有一个 `Person` 类,其中包含 `name` 和 `age` 两个属性,我们想按照年龄进行排序,可以使用 `Comparator.comparing` 方法:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 20),
new Person("Charlie", 30)
);
Collections.sort(people, Comparator.comparing(Person::getAge));
// 输出:[Bob (20), Alice (25), Charlie (30)]
people.forEach(System.out::println);
```
在上面的例子中,`Person::getAge` 是一个从 `Person` 对象映射到 `Integer` 的函数,它提取了每个人的年龄作为关键字。`Comparator.comparing(Person::getAge)` 返回一个比较器,它使用关键字的自然顺序来比较。
需要注意的是,如果关键字类型 `U` 没有实现 `Comparable` 接口,那么 `comparing` 方法会抛出一个 `NullPointerException` 异常。此外,`comparing` 方法还有一个重载版本,可以自定义比较器来比较关键字。
阅读全文