जैसा कि पहले से ही चर्चा है , एपीआई डिजाइनर यह नहीं मानते हैं कि डेवलपर null
उसी तरह से मूल्यों और अनुपस्थित मूल्यों का इलाज करना चाहता है ।
यदि आप अभी भी ऐसा करना चाहते हैं, तो आप अनुक्रम लागू करके इसे स्पष्ट रूप से कर सकते हैं
.map(Optional::ofNullable).findFirst().flatMap(Function.identity())
धारा के लिए। परिणाम दोनों मामलों में एक खाली वैकल्पिक होगा, अगर कोई पहला तत्व नहीं है या यदि पहला तत्व है null
। तो आपके मामले में, आप उपयोग कर सकते हैं
String firstString = strings.stream()
.map(Optional::ofNullable).findFirst().flatMap(Function.identity())
.orElse(null);
एक null
मूल्य प्राप्त करने के लिए यदि पहला तत्व या तो अनुपस्थित है या null
।
यदि आप इन मामलों में अंतर करना चाहते हैं, तो आप बस इस flatMap
कदम को छोड़ सकते हैं :
Optional<String> firstString = strings.stream()
.map(Optional::ofNullable).findFirst().orElse(null);
System.out.println(firstString==null? "no such element":
firstString.orElse("first element is null"));
यह आपके अपडेट किए गए प्रश्न से बहुत भिन्न नहीं है। तुम बस बदलने के लिए "no such element"
के साथ "StringWhenListIsEmpty"
और "first element is null"
साथ null
। लेकिन अगर आप सशर्त पसंद नहीं करते हैं, तो आप इसे भी प्राप्त कर सकते हैं जैसे:
String firstString = strings.stream().skip(0)
.map(Optional::ofNullable).findFirst()
.orElseGet(()->Optional.of("StringWhenListIsEmpty"))
.orElse(null);
अब, firstString
हो जाएगा null
एक तत्व मौजूद है, लेकिन है अगर null
और यह हो जाएगा "StringWhenListIsEmpty"
जब कोई तत्व मौजूद है।