Trong ví dụ cụ thể này, tôi nghĩ rằng @Tagir đúng 100%, hãy đưa nó vào một bộ lọc và thực hiện hai kiểm tra. Tôi sẽ không sử dụng Optional.ofNullable
Công cụ tùy chọn thực sự cho các kiểu trả về không phải là logic ... nhưng thực sự không phải ở đây cũng không ở đó.
Tôi muốn chỉ ra rằng java.util.Objects
có một phương pháp hay cho trường hợp này, vì vậy bạn có thể làm điều này:
cars.stream()
.filter(Objects::nonNull)
Mà sẽ xóa các đối tượng null của bạn. Đối với bất kỳ ai không quen thuộc, đó là bàn tay ngắn cho những điều sau đây:
cars.stream()
.filter(car -> Objects.nonNull(car))
Để trả lời một phần câu hỏi trong tay để trả về danh sách tên xe bắt đầu bằng "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());
Khi bạn đã quen với lambdas, bạn cũng có thể làm điều này:
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());
Thật không may một khi bạn .map(Car::getName)
sẽ chỉ trả lại danh sách tên, không phải những chiếc xe. Vì vậy, ít đẹp hơn nhưng trả lời đầy đủ các câu hỏi:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());