我的问题是关于新的java 8集合流可能性。我有一个带有Date对象作为键的有序映射。现在我编写了下面的方法,它必须找到给定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(...)。 filter(...)在Object类中调用。
如何判断.sorted方法,或者更准确地说,比较器是否返回Date而不是Object?
提前感谢您的帮助!
答案 0 :(得分:4)
问题似乎是由于您的自定义日期类。
但请注意,如果您的地图恰好是NavigableMap(JDK中的所有SortedMaps都可导航),您可以调用NavigableMap#lowerKey
:
private Date getPreviousKey(Date searchKey, NavigableMap<Date, SchluesselSum> timesAndSums) {
return timesAndSums.lowerKey(searchKey);
}
与当前方法相比,这将更有效(在代码行,可读性和性能方面)。