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);
}
这将比您当前的方法更有效(在代码行数、可读性和性能方面)。
我的问题是关于新的 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);
}
这将比您当前的方法更有效(在代码行数、可读性和性能方面)。