इस विशेष उदाहरण में मुझे लगता है कि @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());