Bu özel örnekte @Tagir% 100 doğru olduğunu düşünüyorum bir filtre içine almak ve iki kontrol yapın. Optional.ofNullable
Isteğe bağlı şeyler kullanmak olmazdı gerçekten dönüş türleri için mantık yapmıyorum ... ama gerçekten ne burada ne de orada.
java.util.Objects
Geniş bir durumda bunun için güzel bir yöntem olduğunu belirtmek istedim , böylece bunu yapabilirsiniz:
cars.stream()
.filter(Objects::nonNull)
Boş nesneleri temizleyecek. Tanıdık olmayanlar için, bu aşağıdakilerin kısa elidir:
cars.stream()
.filter(car -> Objects.nonNull(car))
Eldeki soruya kısmen cevap vermek için ile başlayan araç isimleri listesine dönün "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());
Steno lambdalara alıştıktan sonra bunu da yapabilirsiniz:
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());
Ne yazık ki bir kez .map(Car::getName)
sadece isimleri listesini iade edeceksiniz, arabalar değil. Çok daha az güzel ama soruyu tamamen cevaplıyor:
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());