【发布时间】:2015-08-07 20:40:32
【问题描述】:
我的问题是关于新的 java 8 集合流的可能性。我确实有一个以 Date 对象为键的排序映射。现在我已经编写了下面的方法,它必须在给定日期的键集中找到上一个键。因此,以相反的顺序迭代密钥集,它将是给定搜索日期之前的第一个日期。这是我的实现:
private Date getPreviousKey(Date searchKey, Map<Date, SchluesselSum> timesAndSums) {
return timesAndSums.keySet().stream()
.sorted(Comparator.<Date>reverseOrder())
.filter(date -> date.before(searchKey))
.findFirst()
.orElse(null);
}
现在的问题是,对 .sorted(Comparator.reverserOrder()) 的调用返回 java.lang.Object 流而不是 Date 并且我的编译器在 .isLessOrEqual(...) 中找不到。在 Object 类中调用 filter(...)。
我如何告诉 .sorted 方法,或者更准确地说,比较器返回 Date 而不是 Object?
提前感谢您的帮助!
【问题讨论】:
-
您在使用 Eclipse 吗?它用 javac 编译得很好(你甚至可以省略显式类型参数)。
-
我正在使用 Intellij IDEA 14.1 和 Java 1.8.0_45
-
Weird.. 我也在使用 IntelliJ(它在幕后使用 javac),我没有这个问题。问题绝对不在于这段代码。
-
在 Eclipse 中也能正常编译(即使没有显式类型参数)。
-
好吧,首先不要用
java.util.Date扩展名为Date的类,以避免命名混淆。您也可以考虑使用新的 Java Time API。
标签: sorting collections java-8 java-stream