2016-02-08 100 views
-1

所以我想實現一個自定義的收藏家,但可惜的是我被困在一個非常有趣的問題的類型:無法解決拉姆達參數

@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的實例來處理它的智能感覺很奇怪。你有什麼想法爲什麼可能會發生。

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

+0

通過編譯器,哪一個?什麼版本的javac?或者它是Eclipse,IntelliJ,其他? – Tunaki

+0

javac 1.8.0_60和IntelliJ 14,我做了,沒有運氣,或者 – Zahari

+1

@Zahari當我評論'accumulator'方法內的返回塊的內容時,兩個參數'acc'和'elem'被正確解析爲'Map < LocalDate,List >和TripResultDTO類型。 –

回答

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>> { 

現在一切正常。