开发者社区> 问答> 正文

什么是keyExtractor参数?

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

问题来源:Stack Overflow

展开
收起
montos 2020-03-24 12:44:06 879 0
1 条回答
写回答
取消 提交回答
  • 从以下文档中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

    2020-03-24 12:46:14
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载