[英]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
操作。 這將進一步要求您包含一個謂詞,這可以通過對內部流使用終端操作anyMatch
、 allMatch
來實現。
例如,如果您想將輸入航班包含到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.