Dalam contoh khusus ini saya pikir @ Tagir 100% benar, masukkan ke dalam satu filter dan lakukan dua pemeriksaan. Saya tidak akan menggunakan Optional.ofNullable
hal-hal Opsional benar-benar untuk jenis kembali tidak melakukan logika ... tapi benar-benar tidak penting.
Saya ingin menunjukkan bahwa java.util.Objects
ada metode yang bagus untuk ini dalam kasus yang luas, sehingga Anda dapat melakukan ini:
cars.stream()
.filter(Objects::nonNull)
Yang akan menghapus objek nol Anda. Bagi siapa pun yang tidak terbiasa, itulah kependekan dari yang berikut:
cars.stream()
.filter(car -> Objects.nonNull(car))
Untuk sebagian menjawab pertanyaan yang ada untuk mengembalikan daftar nama mobil yang dimulai dengan "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());
Setelah Anda terbiasa dengan steno lambda Anda juga bisa melakukan ini:
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());
Sayangnya begitu Anda, .map(Car::getName)
Anda hanya akan mengembalikan daftar nama, bukan mobil. Jadi kurang cantik tapi sepenuhnya menjawab pertanyaan:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());