이 특정 예제에서 @Tagir는 100 % 정확하다고 생각합니다. 하나의 필터로 가져 와서 두 가지 검사를 수행하십시오. Optional.ofNullable
선택 사항을 사용하지 않는 것은 실제로 반환 유형이 논리를 수행하지 않는 것입니다 ... 그러나 실제로 여기도 거기도 없습니다.
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());