この特定の例では、@ Tagirは100%正しいと思います。1つのフィルターに入れ、2つのチェックを行います。私はOptional.ofNullable
Optionalのものは実際には戻り値の型がロジックを実行しないようにするためのものですが、実際にはここにもそこにもありません。
java.util.Objects
広いケースでこれには良い方法があることを指摘したかったので、これを行うことができます:
cars.stream()
.filter(Objects::nonNull)
あなたのnullオブジェクトをクリアします。知らない人にとっては、これは以下の省略形です。
cars.stream()
.filter(car -> Objects.nonNull(car))
手元の質問に部分的に回答して、次で始まる車名のリストを返します"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());
簡単なラムダに慣れたら、次のようにすることもできます。
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());
残念ながら、いったん.map(Car::getName)
名前のリストだけが返され、車は返されません。それほど美しくはありませんが、完全に質問に答えます:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());