2016-08-02 6 views
23

मैं जावा में निम्न खोज कोड है:'Optional.get()' के बिना 'isPresent()' जाँच

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

मैं नाम से स्तंभ खोजने के लिए और वापस जाने के पहले एक पाया करने के इच्छुक था।

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

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

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

?

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

अद्यतन

ठीक है, ठीक है, मैं सिर्फ एहसास नहीं था, कि findFirst() रिटर्न Optional

+0

ध्यान दें कि आपको जावा में पहचानकर्ता के रूप में '$' का उपयोग नहीं करना चाहिए: [जेएलएस सेक 3.8] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html # जेएलएस-3.8): "$ संकेत का प्रयोग यांत्रिक रूप से जेनरेट किए गए स्रोत कोड में या शायद ही कभी, विरासत प्रणाली पर पूर्व-मौजूदा नामों तक पहुंचने के लिए किया जाना चाहिए।" –

उत्तर

52

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

+0

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

+6

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

+0

@ यह सिर्फ प्राप्त करने के बाहर निकलने के लिए सिर्फ एक छोटा सा रूप है। वैकल्पिक के साथ आपको आमतौर पर 'get' के बजाय' orElse' का उपयोग करना चाहिए क्योंकि मान प्राप्त होने पर 'get' अपवाद फेंक देगा। – puhlen

7
...findFirst().orElse(null); 

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

संबंधित मुद्दे