जैसा कि पहले से ही चर्चा है , एपीआई डिजाइनर यह नहीं मानते हैं कि डेवलपर 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"जब कोई तत्व मौजूद है।