【发布时间】:2017-01-05 03:34:13
【问题描述】:
我有一个List<Meeting>,会议如下:
public class Meeting {
private Calendar date;
public Calendar getDate() {
return this.date
}
}
最初在流的 .sorted() 部分有一个自定义 lambda 比较器(myMeetingList 是 List<Meeting>):
return myMeetingList.parallelStream()
.filter(m -> m.getContacts().contains(contact))
.sorted((m1,m2) -> m1.getDate().compareTo(m2.getDate()))
.collect(Collectors.toList());
我偶然发现了一些东西。我认为它有效,但我不知道为什么。我没有创建自定义比较器,而是将其替换为看起来像静态方法引用的东西:
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)
但是已经搜索了一些博客并阅读了几次文档,我很难理解这一点。阅读我的实际代码是有道理的,但如果不检查 JavaDoc 中的示例,我就无法自己推导出它。有人对如何更好地解释这一点有任何想法吗?
【问题讨论】:
标签: lambda java-8 java-stream comparator