2015-11-25 6 views
10

वैकल्पिक रूपांतरण जावा से वैकल्पिक रूप से जावा वैकल्पिक में रूपांतरण कैसे करें, बिना किसी बयान के उपयोग किए?गुवा से जावा

if (maybeSomething.isPresent()) { 
    return java.util.Optional.of(maybeSomething.get()) 
} else { 
    return java.util.Optional.empty() 
} 
+2

अधिक प्रासंगिक जानकारी की जरूरत है, क्या आपका कोड बेस गुवा के वैकल्पिक रूप से वैकल्पिक रूप से उपयोग करता है? आप जावा 8 के साथ इसे बदलने की योजना कैसे बनाते हैं? आप वर्तमान में अमरूद के वैकल्पिक का उपयोग कैसे करते हैं? उदाहरण के लिए, स्ट्रीम के .findAny() में मौजूदा उदाहरणों के उपयोग की उम्मीद है? आपको पहले माइग्रेशन रणनीति की आवश्यकता है और सबसे महत्वपूर्ण – fge

+0

यदि आप इसे कथन के साथ कैसे करेंगे? क्या आपने कुछ कोशिश की है? –

+0

एपीआई माइग्रेशन के साथ कोई सामान्य समस्या नहीं है, केवल एक ही मामला है जहां मुझे ऐसे रूपांतरण की आवश्यकता है – Libre13

उत्तर

17

उपयोग अमरूद परिवर्तन

maybeSomething 
    .transform(java.util.Optional::of).or(java.util.Optional.empty()); 
+2

इस और @ कयामान के नल-आधारित दृष्टिकोण के बीच चयन करने के लिए कोई स्पष्ट तकनीकी कारण नहीं दिख रहा था, मैं उत्सुक था कि एक या दूसरा प्रदर्शन लाभ दिखाएगा या नहीं। मैंने कुछ त्वरित प्रदर्शन परीक्षणों को मार दिया, और निष्पादन के समय में कोई महत्वपूर्ण अंतर नहीं मिला। आगे विश्लेषण नल-आधारित दृष्टिकोण के लिए काफी अधिक (~ 2x) ऑब्जेक्ट आवंटन दिखाता है। तो, मुझे लगता है कि यह जवाब निश्चित रूप से सबसे सही है। – JakeRobb

12

कैसे Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());?

+0

इसके लिए रूपांतरण को शून्य और पीछे की आवश्यकता होती है, लेकिन वैकल्पिक रूप से आप आमतौर पर न्यूल – MariuszS

+0

के साथ काम करना चाहते हैं, लेकिन चूंकि शून्य में परिवर्तित करने में कोई नकारात्मकता नहीं है, सटीक एक ही अंतिम परिणाम प्राप्त करने के लिए एक छोटा रास्ता प्रदान करता है। – Kayaman

+1

@ MariuszS के उत्तर पर मेरी टिप्पणी देखें - यह विकल्प अधिक ऑब्जेक्ट आवंटन करता है। यदि आप कॉल की किसी भी महत्वपूर्ण मात्रा से निपट रहे हैं, तो वैकल्पिक उत्तर, थोड़ी देर तक (इसे एक उपयोगिता विधि में रखें और इसे फिर कभी न देखें), कचरा कलेक्टर पर तनाव को कम करेगा। – JakeRobb

1

यह पूरी तरह से प्रयोग आप वर्तमान में अपने अमरूद के Optionals के कर पर निर्भर करता है; और पहली समस्या दोनों के बीच मतभेदों के साथ निहित है।

दूसरों के बीच में:

  • अमरूद के वैकल्पिक सार, के अंतिम है जावा 8;
  • विधियां अमरूद पर मौजूद हैं जो जावा 8 पर नहीं है, और इसके विपरीत।

जिसका अर्थ है कि आपको यह निर्धारित करने की आवश्यकता है कि आपको अमरूद के अलग-अलग उपयोग हैं; यह शर्त होगी कि आपको समकक्ष जावा 8 का निर्माण करना होगा।

लेकिन दोनों के लिए एपीआई में अंतर को देखते हुए, रास्ते में कुछ if रों अपरिहार्य लग ...

मेरा व्यक्तिगत सुझाव यहां सिर्फ सभी रास्ते जाने और जावा के साथ अमरूद के के सभी वर्तमान का उपयोग करता बदलने के लिए 8 की होगी ; और यदि "चरणबद्ध अवधि" की आवश्यकता होती है, तो आवश्यक विधियों को हटा दें और जब तक कि गुवा के वैकल्पिक रूप से पूरी तरह से इनकार न किया जाए, तब तक उन्हें आवश्यकतानुसार प्रदान करें।

+1

यह मैं नहीं था जो डाउनवॉटेड था, लेकिन आप वास्तव में सवाल को संबोधित नहीं करते हैं, बल्कि दो उपलब्ध 'वैकल्पिक'-कार्यान्वयन के बीच पेशेवरों, विपक्ष और मतभेदों का एक अच्छा अवलोकन देते हैं। – Henrik

11

Guava Release 21 और fromJavaUtil रूपांतरण विधियों को Optional कक्षा में पेश किया गया।

हुड यह Kayaman के जवाब में सुझाव के रूप में बड़े पैमाने पर लागू किया जा रहा है के तहत:

public java.util.Optional<T> toJavaUtil() { 
    return java.util.Optional.ofNullable(orNull()); 
} 

... 

public static <T> Optional<T> fromJavaUtil(@Nullable java.util.Optional<T> javaUtilOptional) { 
    return (javaUtilOptional == null) ? null : fromNullable(javaUtilOptional.orElse(null)); 
} 
संबंधित मुद्दे