Java 使用流API筛选集合时出现问题
我尝试使用流API过滤具有集合字段的对象集合:Java 使用流API筛选集合时出现问题,java,java-stream,Java,Java Stream,我尝试使用流API过滤具有集合字段的对象集合: @Override public void method (List<Flight> flightList) { List<Flight> trueFlights = flightList.forEach(flight -> flight.getSegments().stream().filter(segment -> segment.getArrivalDate().isBefore(segment.getD
@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;
}
航班:
class Flight {
private final List<Segment> segments;
//.. getter setter
class航班{
私人最后名单部分;
//…接球手
我做错了什么?您可以在
流上查找过滤器操作。这将进一步要求您包含谓词,这可以通过在内部流上使用终端操作anyMatch
,allMatch
来实现
例如,如果要将输入航班包括到trueFlights
如果其段的任何满足到达日期早于出发日期的条件,则可以执行anyMatch
:
List<Flight> trueFlights = flightList.stream()
.filter(flight -> flight.getSegments().stream()
.anyMatch(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate())))
.collect(Collectors.toList());
List trueFlights=flightList.stream()
.filter(flight->flight.getSegments().stream())
.anyMatch(段->段.getArrivalDate().isBefore(段.getDepartureDate()))
.collect(Collectors.toList());
另一方面,您所做的错误是使用了具有void
返回类型的forEach
,然后尝试从返回类型中进一步收集元素。arrivalDate不总是在De出发日期之前吗?如果您暂时忽略编译错误,这段代码的目的是什么。
List<Flight> trueFlights = flightList.stream()
.filter(flight -> flight.getSegments().stream()
.anyMatch(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate())))
.collect(Collectors.toList());