首页 > 解决方案 > 什么是 keyExtractor 参数

问题描述

我正在学习Comparator界面,但我对它的静态Comparator.comparing()方法感到困惑。关于Comparator.comparing()方法的参数以及它如何使用方法引用。当我查看文档时,它说它有一个“keyExtractor 参数”。你能解释什么让我感到困惑吗?

标签: javacomparator

解决方案


从以下文档Comparator#comparing(Function)

接受Comparable从 type 中提取排序键T并返回Comparator<T>按该排序键进行比较的函数。

这样您就可以根据这些对象的属性来比较对象。相同的文档给出了一个例子:

API 注释:

例如,要获得按姓氏Comparator比较对象的 a,Person

Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);

当你这样做时:

Person p1 = ...;
Person p2 = ...;
int result = byLastName.compare(p1, p2);

给定的键提取器将从每个中提取姓氏值Person,以便Person“直接”比较这些值而不是对象。如果键不是Comparable,那么您可以使用允许您指定用于比较提取的键值的重载。Comparator


上述byLastName比较器将与以下内容相同:

public class ByLastNameComparator implements Comparator<Person> {

  @Override
  public int compare(Person p1, Person p2) {
    return p1.getLastName().compareTo(p2.getLastName());
  }
}

调用p1.getLastName()p2.getLastName()将是关键提取器Function实现的地方。


推荐阅读