Java 8:Comparator返回Object的流而不是特定的类型

时间:2015-05-26 09:00:40

标签: sorting collections java-8 java-stream

我的问题是关于新的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?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

问题似乎是由于您的自定义日期类。

但请注意,如果您的地图恰好是NavigableMap(JDK中的所有SortedMaps都可导航),您可以调用NavigableMap#lowerKey

private Date getPreviousKey(Date searchKey, NavigableMap<Date, SchluesselSum> timesAndSums) {
  return timesAndSums.lowerKey(searchKey);
}

与当前方法相比,这将更有效(在代码行,可读性和性能方面)。

相关问题