-2

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?

2
  • ....filter(Optional::isPresent).map( e -> e.get())... Commented Oct 7, 2020 at 18:17
  • flatMap by Optional:stream should be enough: dtos.stream().map(a-> positions.getPositions(a.getId().getValue())).flatMap(Optional::stream).collect(Collectors.toList()); will provide List<FlightPositionRoute> Commented Oct 7, 2020 at 19:25

1 Answer 1

2

You just need to unpack the Optional:

List<FlightPositionRoute> flightPositionRoutes = dtos.stream() .map(a-> positions.getPositions(a.getId().getValue())) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()); 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.