我正在学习Comparator
界面,我对它的静态感到困惑Comparator.comparing()
方法。关于Comparator.comparing()
方法的参数以及它如何使用方法引用。当我查看文档时,它说它有一个“keyExtractor 参数”。你能解释一下是什么让我困惑吗?
从文档Comparator#comparing(Function) https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Comparator.html#comparing(java.util.function.Function):
接受一个提取a的函数Comparable
从类型中排序键T
,并返回一个Comparator<T>
通过该排序键进行比较。
这样您就可以根据对象的属性来比较对象。同一文档给出了一个例子:
API注意事项:
例如,要获得Comparator
比较Person
对象按姓氏命名,
Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
当你这样做时:
Person p1 = ...;
Person p2 = ...;
int result = byLastName.compare(p1, p2);
给定的密钥提取器将从每个密钥中提取姓氏值Person
为了比较这些值而不是Person
“直接”对象。如果钥匙不是Comparable
那么你可以使用超载 https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Comparator.html#comparing(java.util.function.Function,java.util.Comparator)它可以让你指定一个Comparator
用于比较提取的关键值。
以上byLastName
比较器将与以下相同:
public class ByLastNameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getLastName().compareTo(p2.getLastName());
}
}
电话打往哪里p1.getLastName()
and p2.getLastName()
将是密钥提取器Function
执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)