In questo particolare esempio penso @Tagir è corretta al 100% lo fanno in un filtro e fare le due assegni. Non userei lo Optional.ofNullable
il materiale opzionale è davvero per i tipi di ritorno che non devono fare la logica ... ma in realtà né qui né lì.
ho voluto sottolineare che java.util.Objects
ha un bel metodo per questo in un caso ampio, in modo da poter fare questo:
cars.stream()
.filter(Objects::nonNull)
che annullerà i vostri oggetti nulli. Per chi non lo conoscesse, questo è il breve mano per i seguenti:
cars.stream()
.filter(car -> Objects.nonNull(car))
Per rispondere pienamente alla domanda a portata di mano per restituire l'elenco delle vetture che hanno un nome e comincia 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());
volta ci si abitua alle lambda stenografia si potrebbe anche fare questo:
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());
ti voglio “valori di filtro solo se non nullo "O" filtra i valori nulli "? Mi sembra contraddittorio. – Holger
Potrei suggerire di accettare [la risposta di Tunaki] (http://stackoverflow.com/a/32884225/42473) in quanto sembra essere l'unica che risponde effettivamente alla tua domanda. –