java - 什么是 keyExtractor 参数
问题描述
我正在学习Comparator
界面,但我对它的静态Comparator.comparing()
方法感到困惑。关于Comparator.comparing()
方法的参数以及它如何使用方法引用。当我查看文档时,它说它有一个“keyExtractor 参数”。你能解释什么让我感到困惑吗?
解决方案
从以下文档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
实现的地方。
推荐阅读
- css - 是否有一个 css minifier 计算来自 :root {} 的变量(可能来自不同的文件)?
- c# - 如何重命名返回的元组项?
- serialization - FlatBuffers 与 Protobuf
- reactjs - npm run-script build(production build) 命令,在 React JS 的浏览器中显示源代码
- html - 单选按钮:一次只检查一个按钮
- javascript - 我无法以使用名称的形式显示错误消息
- python - Python 3.x 中 __getattr__ 特殊方法破坏 inspect.getmembers() 的解决方法
- java - 调用某些方法时如何忽略键盘上的按键?
- windows - 使用 NSIS 写入注册表项失败
- java - 如何在休眠中创建相关子查询