我尝试使用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
我在做什么错了?
答案 0 :(得分:1)
您可能正在寻找filter
上的Stream
操作。这将进一步要求您包含一个谓词,这可以通过在内部流上使用终端操作anyMatch
,allMatch
来实现。
例如,如果您要包含到trueFlights
的细分受众群中的任何满足到达日期早于出发日期的条件的输入航班,则可以执行{{1} }:
anyMatch
另一方面,您做错了什么,就是利用List<Flight> trueFlights = flightList.stream()
.filter(flight -> flight.getSegments().stream()
.anyMatch(segment -> segment.getArrivalDate().isBefore(segment.getDepartureDate())))
.collect(Collectors.toList());
并返回一个forEach
类型,然后再尝试从中进一步收集元素。