【发布时间】:2016-05-18 00:48:33
【问题描述】:
所以我正在尝试实现一个自定义收集器,但不幸的是我遇到了一个非常有趣的问题:
@Override
public BiConsumer<Map<LocalDate, List<TripResultDTO>>, TripResultDTO> accumulator() {
return (acc,elem) -> {
long departureTime = elem.getOutbound().getDepartureTimeLocal();
LocalDate departureDate = new LocalDateTime(departureTime).toLocalDate();
List<TripResultDTO> othersInTheSameDay = acc.getOrDefault(departureDate,new LinkedList<>());
othersInTheSameDay.add(elem);
acc.put(departureDate,othersInTheSameDay);
};
}
所以在上面的代码中,编译器无法解析 TripResultDTO 类型的 elem 对象的任何方法。
getOutbound 方法不用说是红色高亮显示,无法解析。从智能角度来看,TripResultsDTO 似乎被简单地视为Object 而不是TripResultDTO 的实例,这很奇怪。你知道为什么会发生这种情况吗?
也欢迎以更好的方式做我正在做的事情的任何想法。
【问题讨论】:
-
编译器,哪一个?什么版本的javac?还是 Eclipse、IntelliJ 等?
-
javac 1.8.0_60 和 IntelliJ 14,我做到了,也没有运气
-
@Zahari 当我在
accumulator方法中评论返回块的内容时,acc和elem两个参数被正确解析为Map<LocalDate, List<TripResultDTO>>和TripResultDTO类型。
标签: java lambda java-8 collectors