[英]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.