在排序的流方法中使用Comparator::reverseOrder
和Comparator.reverseOrder()
之间有什么区别。
Stream<String> streamText = Stream.of("over the river", "through the woods", "to grandmother's house we go");
这有效:
streamText.filter(n -> n.startsWith("t"))
.sorted(Comparator.reverseOrder())
.findFirst().ifPresent(System.out::println);
但是这不能编译:
streamText.filter(n -> n.startsWith("t"))
.sorted(Comparator::reverseOrder)
.findFirst().ifPresent(System.out::println);
答案 0 :(得分:9)
好问题!
sorted
需要Comparator<T>
,对吗? Comparator<T>
是一个功能界面。它表示一个函数,它接受2个参数并返回一个int
,表示哪个参数更大或者它们是否相等。
对于Comparator.reverseOrder()
,reverseOrder
是一种返回Comparator<T>
的方法。在这种情况下,您调用该方法并返回Comparator
,该sorted
可用作Comparator::reverseOrder
的参数。一切都很好。
如果是reverseOrder
,则不会调用reverseOrder
。相反,您将sorted
作为函数传递给sorted
。如上所述,int
将接受一个带有2个参数并返回reverseOrder
的函数,但是您给它Comparator<T>
,它不带参数并返回Comparator<T>
。看到这里的不匹配?
预期:一个函数,它接受2个参数并返回一个int OR
Comparator<T>
对象你给它的东西:一个不带参数并返回
的函数dur <- df %>% mutate(Date = as.numeric(as.POSIXct(Date))) %>% group_by(SessionId) %>% summarize(duration = max(Date)-min(Date))
这会导致编译器错误。