【发布时间】:2021-01-22 18:16:07
【问题描述】:
我想转换
List<FlightPositionRoute> flightPositionRoutes = new ArrayList<>();
dtos.stream()
.map(a-> positions.getPositions(a.getId()
.getValue()))
.forEach(flightPositionRoute ->
flightPositionRoute.ifPresent(flightPositionRoutes::add));
到这里:
List<FlightPositionRoute> flightPositionRoutes = dtos.stream()
.map(a-> positions.getPositions(a.getId()
.getValue()))
.filter(Optional::isPresent)
.collect(Collectors.toList());
我的意思是我想使用过滤器而不是foreach,因为它更漂亮;)
不幸的是,我得到了
Required type: List <FlightPositionRoute>
Provided: List <Optional<FlightPositionRoute>>
我该如何修复它?
【问题讨论】:
-
....filter(Optional::isPresent).map( e -> e.get())... -
flatMapbyOptional:stream应该足够了:dtos.stream().map(a-> positions.getPositions(a.getId().getValue())).flatMap(Optional::stream).collect(Collectors.toList());将提供List<FlightPositionRoute>
标签: java java-stream