2016-03-30 8 views
6

मैं जावा 8 लैम्ब्डा में गैर-अंतिम चर का उपयोग कैसे कर सकता हूं। यह संकलन त्रुटि कह 'स्थानीय चर तारीख एक संलग्न दायरे में परिभाषित किया जाना चाहिए अंतिम या प्रभावी ढंग से अंतिम को फेंक देताजावा 8 में गैर अंतिम चर का उपयोग कैसे करें 8 Lambardas

मैं वास्तव में निम्नलिखित

public Integer getTotal(Date date1, Date date2) { 
    if(date2 == null || a few more conditions) { 
     date2 = someOtherDate; 
    } 
    return someList.stream().filter(filter based on date1 and date2).map(Mapping Function).reduce(Addition); 
} 

मैं यह कैसे प्राप्त करते हैं हासिल करना चाहते हैं? यह दिनांक 2 के लिए संकलन त्रुटि फेंकता है। धन्यवाद,

+0

वैसे, पुरानी तारीख-समय कक्षाएं जैसे कि ''java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date। एचटीएमएल) अब [विरासत] हैं (https://en.wikipedia.org/wiki/Legacy_system), [java.time] द्वारा आपूर्ति की गई (https://docs.oracle.com/javase/9/docs/api/ जावा/टाइम/पैकेज-सारांश.html) जावा 8 और 9 में निर्मित कक्षाएं देखें। [ओरेकल द्वारा ट्यूटोरियल] देखें (https://docs.oracle.com/javase/tutorial/datetime/TOC.html)। आपको 'अवधि' और 'अवधि' कक्षाओं में रुचि हो सकती है। –

उत्तर

11

एक और चर का उपयोग करें जिसे आप एक बार शुरू कर सकते हैं।

final Date tmpDate; 
if(date2 == null || a few more conditions) { 
    tmpDate = someOtherDate; 
} else { 
    tmpDate = date2; 
} 
1

मुझे लगता है कि तुम सिर्फ परम DATE2 के बाहर और फिर मिलना चाहिए विधि getTotal बुला, बस इस तरह से नीचे:

Date date1; 
Date date2; 

if(date2 == null || a few more conditions) { 
    date2 = someOtherDate; 
} 

getTotal(date1, date2) 


public Integer getTotal(Date date1, Date date2) { 
    return someList.stream().filter(filter based on date1 and date2).map(Mapping Function).reduce(Addition); 
} 
+0

क्या होगा यदि कक्षा के बाहर से विधि कहा जाता है? –

+0

दो फ़ंक्शंस को गठबंधन करने के लिए एक और तरीका बनाएं, किसी को param date2 का परिणाम मिल रहा है, दूसरा एक param param date1 और date2 द्वारा अंतिम परिणाम प्राप्त कर रहा है। और हम बाहरी विधि से नई विधि को कॉल कर सकते हैं – Tony

0

बस ठीक पहले

Date date3 = date2; // date3 is effectively final in Java 8. Add 'final' keyword in Java 7. 

की तरह एक पंक्ति जोड़ें 0 lके स्थान पर अपना लैम्ब्डा और date3 का उपयोग करें।

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