En este ejemplo en particular, creo que @Tagir es 100% correcto, mételo en un filtro y realiza las dos comprobaciones. No usariaOptional.ofNullable
las cosas opcionales para que los tipos de retorno no estén haciendo lógica ... pero realmente ni aquí ni allá.
Quería señalar que java.util.Objects
tiene un buen método para esto en un caso amplio, por lo que puede hacer esto:
cars.stream()
.filter(Objects::nonNull)
Lo que limpiará tus objetos nulos. Para cualquiera que no esté familiarizado, esa es la abreviatura de lo siguiente:
cars.stream()
.filter(car -> Objects.nonNull(car))
Para responder parcialmente la pregunta en cuestión y devolver la lista de nombres de automóviles que comienza con "M"
:
cars.stream()
.filter(car -> Objects.nonNull(car))
.map(car -> car.getName())
.filter(carName -> Objects.nonNull(carName))
.filter(carName -> carName.startsWith("M"))
.collect(Collectors.toList());
Una vez que te acostumbres a las taquillas lambdas, también puedes hacer esto:
cars.stream()
.filter(Objects::nonNull)
.map(Car::getName) // Assume the class name for car is Car
.filter(Objects::nonNull)
.filter(carName -> carName.startsWith("M"))
.collect(Collectors.toList());
Desafortunadamente, una vez .map(Car::getName)
que solo regreses la lista de nombres, no los autos. Por lo tanto, menos hermoso pero responde completamente la pregunta:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());