无法解析lambda参数的类型

时间:2016-02-08 11:13:13

标签: java lambda java-8 collectors

所以我试图实现一个自定义收藏家但不幸的是我陷入了一个非常有趣的问题:

@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的实例的智能感,这很奇怪。你知道为什么会这样吗。

也欢迎以更好的方式做我正在做的事情的任何想法。

1 个答案:

答案 0 :(得分:0)

所以实际上这是一个非常漂亮的菜鸟错误。我在收藏家的签名中所做的是:

public class CheapestPerDayCollector <TripResultDTO> implements Collector<TripResultDTO, Map<LocalDate, List<TripResultDTO>>, List<TripResultDTO>> {

实际上将TripResultsDTO表示为泛型类型而不是实际类。我把它重写为:

public class CheapestPerDayCollector  implements Collector<TripResultDTO, Map<LocalDate, List<TripResultDTO>>, List<TripResultDTO>> {

现在一切正常。