'Optional.get ()' बिना'Present () 'चेक के


92

मेरे पास जावा में निम्नलिखित खोज कोड है:

return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();

मैं नाम से कॉलम ढूंढना चाहता था और पहले पाया गया रिटर्न।

मैं समझता हूं कि एक ऐसा मामला है जब कुछ नहीं मिला और इसे संसाधित किया जाना चाहिए, लेकिन कैसे?

क्या यह इस शपथ ग्रहण से चाहता है:

'Optional.get()' without 'isPresent()' check

?

कैसे ठीक करना है? nullअगर कुछ नहीं मिला तो वापसी की कामना करता हूं ।

अपडेट करें

ठीक है, ठीक है, मुझे अभी पता नहीं चला, कि findFirst()रिटर्न Optional


2
ध्यान दें कि आपको $जावा में एक पहचानकर्ता के रूप में उपयोग नहीं करना चाहिए : जेएलएस सेक 3.8 : "$ साइन का उपयोग केवल यांत्रिक रूप से उत्पन्न स्रोत कोड में या शायद ही कभी किया जाना चाहिए, ताकि विरासत प्रणालियों पर पहले से मौजूद नामों का उपयोग किया जा सके।"
एंडी टर्नर

जवाबों:


187

बदलें get()के साथ orElse(null)


1
क्यों? :) क्यों orElse"या" से शुरू होता है?
Dims

15
क्योंकि वह विधि का नाम है। और elseएक कीवर्ड है।
एंडी टर्नर

8
@ गेटऑर्लसे का अपना संक्षिप्त रूप बनाता है, बस गेट को छोड़ देना। वैकल्पिक के साथ आप सामान्य रूप से उपयोग करना चाहिए orElseबजाय getक्योंकि getयदि मान रिक्त है एक अपवाद फेंक देते हैं।
पुहलेन

4
@ पिनहलेन orElseGet()एक लेता है Supplier<T>, जबकि orElse()एक लेता है T। ये बराबर नहीं हैं।
bcsb1001

2
@ bcsb1001 वह नहीं है जो उसने कहने की कोशिश की, "getOrElse" एक ऐसा नाम है जिसका आविष्कार उसने उद्देश्य को समझाने के लिए किया था orElse; orElseGetउनकी टिप्पणी में कोई संदर्भ नहीं है ;)
रोरिम

22
...findFirst().orElse(null);

यदि मौजूद है तो मान लौटाता है, अन्यथा वापस लौटता है null। प्रलेखन कहता है कि पारित पैरामीटर हो सकता है null(किसके लिए निषिद्ध है orElseGetऔर orElseThrow)।


1
यह आंशिक रूप से सच है। findFirst () में निम्नलिखित नियम हैं: "जब कोई मुठभेड़ आदेश नहीं होता है तो यह स्ट्रीम से किसी भी तत्व को वापस करता है।" -> इसलिए यदि आपका फ़िल्टर मिलान किए गए तत्व को वापस नहीं करता है, तो findFirst () पहले वाले को लौटा देगा (धारा को छोड़कर पहले से खाली है)
Fl0R1D3R


0

वैकल्पिक बनाया गया था ताकि इन सभी दशकों के बाद कोड, अंत में अशक्त से बचने शुरू कर सकें ।

.Get को निकालें (), वैकल्पिक को स्वयं लौटाएँ और कॉलिंग कोड का सौदा उचित तरीके से करें (ठीक उसी तरह जैसे आपको उस स्थिति में करना होगा जहाँ आप अशक्त हो रहे हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.