Lambda 将自定义比较器替换为Comparator.Comparating()-为什么这样做?

Lambda 将自定义比较器替换为Comparator.Comparating()-为什么这样做?,lambda,java-8,java-stream,comparator,Lambda,Java 8,Java Stream,Comparator,我有一个列表,会议如下: public class Meeting { private Calendar date; public Calendar getDate() { return this.date } } 在中,最初在流的.sorted()部分中有一个自定义lambda比较器(myMeetingList是列表): 我完全是偶然发现了什么东西。我认为它有效,但我不知道为什么。我没有创建自定义比较器,而是将其替换为静态方法引用: return myMe

我有一个
列表
,会议如下:

public class Meeting {
    private Calendar date;
    public Calendar getDate() {
      return this.date
    }
}
在中,最初在流的
.sorted()
部分中有一个自定义lambda比较器(
myMeetingList
列表
):

我完全是偶然发现了什么东西。我认为它有效,但我不知道为什么。我没有创建自定义比较器,而是将其替换为静态方法引用:

return myMeetingList.parallelStream()
                    .filter(m -> m.getContacts().contains(contact))
                    .sorted(Comparator.comparing(Meeting::getDate))
                    .collect(Collectors.toList());
我相信这是有效的,但我真的不知道为什么。
Comparator.comparing()实现之一的JavaDoc显示

static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)

static比较器中的代码。比较
只是:

Objects.requireNonNull(keyExtractor);

return (Comparator<T> & Serializable)
        (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
将执行

c1.getDate()

因此,最终结果基本上与原始代码相同。

比较器中的代码。比较
只是:

Objects.requireNonNull(keyExtractor);

return (Comparator<T> & Serializable)
        (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
将执行

c1.getDate()

因此,最终结果基本上与原始代码相同。

谢谢,所以本例中的比较器是比较器?是
T
将被推断为
Calendar
谢谢,因此本例中的比较器是比较器?是
T
将被推断为
Calendar