2015-06-16 6 views
5

क्या जावा 8 में निम्नलिखित करने का कोई शानदार तरीका है, isPresent और get से परहेज करना?isPresent() से बचें और नियंत्रण (0) नियंत्रण तर्क

void doStuff(String someValue, Optional<Boolean> doIt) { 
    if (doIt.isPresent()) { 
     if (doIt.get()) { 
      trueMethod(someValue); 
     } else { 
      falseMethod(someValue); 
     } 
    } 
} 

मैं map उपयोग करने की कोशिश, सफलता नहीं मिली। लेकिन शायद मैंने काफी मेहनत की कोशिश नहीं की?

+4

शायद यह विधि पैरामीटर के रूप में 'वैकल्पिक' का उपयोग करने के लिए एक अच्छा डिज़ाइन नहीं है। ओपनजेडीके डेवलपर द्वारा [यह उत्तर] देखें (http://stackoverflow.com/a/23464794/4856258)। –

+0

मैं @Tagir Valeev से सहमत हूं। मैं उम्मीद करता हूं, चूंकि यह कार्य कुछ भी नहीं करता है जब 'खाली' खाली होता है, तो आपने हमें फ़ंक्शन का एक विस्तृत संस्करण दिया है। सबसे अच्छा विकल्प शायद ओवरराइड प्रदान करना है। –

उत्तर

6

आप ifPresent बजाय isPresent और get उपयोग कर सकते हैं:

void doStuff(String someValue, Optional<Boolean> doIt) { 
    doIt.ifPresent (b -> { 
          if (b) 
           trueMethod(someValue); 
          else 
           falseMethod(someValue); 
         }); 
} 

संपादित करें: मेरे कोड तय, जब से तुम त्रिगुट ऑपरेटर का उपयोग नहीं कर सकते trueMethod और falseMethod कुछ भी वापस नहीं है।

0

इस कार्यात्मक दृष्टिकोण map का उपयोग कर होगा:

Function<Boolean, Void> logic = isTrue -> { 
    if (isTrue) trueMethod(someValue); 
    else falseMethod(someValue); 
    return null; 
}; 
doIt.map(logic); 

हालांकि, यह वास्तव में बदसूरत, ज्यादातर की वजह से है अपने "नहीं-बहुत कार्यात्मक" trueMethod/falseMethod, जो दोनों लौट void (प्रमुख बदसूरत return null)।

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