Java 8: Comparator returns 对象流而不是特定类型

Java 8: Comparator returns stream of Object instead of specific type

我的问题是关于新的 java 8 种集合流式传输的可能性。我确实有一个以日期对象为键的排序地图。现在我已经编写了下面的方法,它必须在给定日期的键集中找到前一个键。因此,以相反的顺序遍历键集,它将是给定搜索日期之前的第一个日期。这是我的实现:

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()) return 的调用是 java.lang.Object 而不是 Date 的流,我的编译器找不到 .isLessOrEqual (...) 在 class 对象中的 .filter(...) 调用中。

如何告诉 .sorted 方法,或者更准确地说,比较器是 return 日期而不是对象?

提前感谢您的帮助!

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

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

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

这将比您当前的方法更有效(在代码行数、可读性和性能方面)。