繁体   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