使用Stream API过滤集合时出现问题

时间:2020-09-26 01:06:45

标签: java java-stream

我尝试使用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 

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找filter上的Stream操作。这将进一步要求您包含一个谓词,这可以通过在内部流上使用终端操作anyMatchallMatch来实现。

例如,如果您要包含到trueFlights的细分受众群中的任何满足到达日期早于出发日期的条件的输入航班,则可以执行{{1} }:

anyMatch

另一方面,您做错了什么,就是利用List<Flight> trueFlights = flightList.stream() .filter(flight -> flight.getSegments().stream() .anyMatch(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate()))) .collect(Collectors.toList()); 并返回一个forEach类型,然后再尝试从中进一步收集元素。