In diesem speziellen Beispiel denke ich, dass @Tagir 100% korrekt ist. Holen Sie es in einen Filter und führen Sie die beiden Überprüfungen durch. Ich würde Optional.ofNullable
das optionale Zeug nicht verwenden, damit Rückgabetypen keine Logik ausführen ... aber wirklich weder hier noch dort.
Ich wollte darauf hinweisen, dass java.util.Objects
dies in einem breiten Fall eine gute Methode dafür ist, also können Sie dies tun:
cars.stream()
.filter(Objects::nonNull)
Dadurch werden Ihre Nullobjekte gelöscht. Für alle, die nicht vertraut sind, ist dies die Abkürzung für Folgendes:
cars.stream()
.filter(car -> Objects.nonNull(car))
Um die vorliegende Frage teilweise zu beantworten und die Liste der Fahrzeugnamen zurückzugeben, die mit "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());
Sobald Sie sich an die Kurzschrift Lambdas gewöhnt haben, können Sie auch Folgendes tun:
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());
Sobald Sie dies tun, werden Sie leider .map(Car::getName)
nur die Liste der Namen zurückgeben, nicht die Autos. Also weniger schön, aber vollständig beantwortet die Frage:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());