I would like to convert
List<FlightPositionRoute> flightPositionRoutes = new ArrayList<>(); dtos.stream() .map(a-> positions.getPositions(a.getId() .getValue())) .forEach(flightPositionRoute -> flightPositionRoute.ifPresent(flightPositionRoutes::add)); To this:
List<FlightPositionRoute> flightPositionRoutes = dtos.stream() .map(a-> positions.getPositions(a.getId() .getValue())) .filter(Optional::isPresent) .collect(Collectors.toList()); I mean I would like to use filter instead of foreach, because it's prettier ;)
Unfortunately, I'm getting
Required type: List <FlightPositionRoute> Provided: List <Optional<FlightPositionRoute>> How can I repair it?
....filter(Optional::isPresent).map( e -> e.get())...flatMapbyOptional:streamshould be enough:dtos.stream().map(a-> positions.getPositions(a.getId().getValue())).flatMap(Optional::stream).collect(Collectors.toList());will provideList<FlightPositionRoute>