簡體   English   中英

過濾收集問題,使用 Stream API

[英]Problem with filtering collection, using Stream API

我嘗試使用 Stream API 過濾具有集合字段的對象集合:

@Override
public void method (List<Flight> flightList) 
{
List<Flight> trueFlights = flightList.forEach(flight -> flight.getSegments().stream().filter(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate())).collect(Collectors.toList()));
return trueFlights;
}

但它不編譯:

錯誤:(32, 27) java:不兼容的類型:void 不能轉換為 java.util.List

部分:

class Segment {
    private final LocalDateTime departureDate;

    private final LocalDateTime arrivalDate; 
    //..getter setter  

航班:

class Flight {
    private final List<Segment> segments;
   //.. getter setter 

我究竟做錯了什么?

您可能正在尋找對Stream filter操作。 這將進一步要求您包含一個謂詞,這可以通過對內部流使用終端操作anyMatchallMatch來實現。

例如,如果您想將輸入航班包含到trueFlights如果其任何段滿足到達日期早於出發日期的條件,您可以執行anyMatch

List<Flight> trueFlights = flightList.stream()
        .filter(flight -> flight.getSegments().stream()
                .anyMatch(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate())))
        .collect(Collectors.toList());

另一方面,您forEach是使用具有void返回類型的forEach ,然后嘗試從中進一步收集元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM