我正在学习Comparator接口,但对它的静态Comparator.comparing()方法感到困惑。关于Comparator.comparing()方法的参数以及如何使用方法引用。当我查看文档时,它说它具有“ keyExtractor参数”。您能解释一下让我感到困惑的原因吗?
问题来源:Stack Overflow
从以下文档中Comparator#comparing(Function)
:
接受一个函数,该函数Comparable从type 提取一个排序键T,并返回一个Comparator 与该排序键进行比较的值。
因此,您可以根据对象的属性比较对象。相同的文档提供了一个示例:
API注意: 例如,要获取一个按对象的姓氏Comparator比较Person对象的,
Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
当您这样做时:
Person p1 = ...;
Person p2 = ...;
int result = byLastName.compare(p1, p2);
给定的密钥提取器将从每个密钥提取器提取姓氏值Person,以便比较这些值,而不是Person“直接” 比较对象。如果键不是,Comparable则可以使用重载,该重载使您可以指定a 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落实。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。