ในตัวอย่างนี้ฉันคิดว่า @Tagir ถูกต้อง 100% นำไปไว้ในตัวกรองเดียวและทำการตรวจสอบสองครั้ง ฉันจะไม่ใช้Optional.ofNullable
สิ่งที่เป็นตัวเลือกสำหรับประเภทการส่งคืนไม่ใช่เพื่อทำตรรกะ ... แต่จริงๆแล้วไม่ได้อยู่ที่นี่หรือที่นั่น
ฉันต้องการชี้ให้เห็นว่าjava.util.Objects
มีวิธีการที่ดีสำหรับกรณีนี้ในวงกว้างดังนั้นคุณสามารถทำได้:
cars.stream()
.filter(Objects::nonNull)
ซึ่งจะล้างวัตถุว่างเปล่าของคุณ สำหรับคนที่ไม่คุ้นเคยนั่นเป็นทางลัดสำหรับสิ่งต่อไปนี้:
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());