मैं सिर्फ lamdas जावा अभ्यास कर रहा हूँ 8. मेरे समस्या के रूप में अपनी कम से कम 10 तक एक पूर्णांक में सभी अंकसंख्या के अंकों का योग रिकर्सिव जावा 8 lambdas (जब तक अंकों कम से कम 10 है) केवल
योग इस प्रकार है और चेक (एकल अंक बाईं मतलब है) अगर इसकी 1
नमूना इनपुट 1
100
नमूना आउटपुट 1
1 // true because its one
नमूना इनपुट 2
55
नमूना आउटपुट 2
1 ie 5+5 = 10 then 1+0 = 1 so true
मैं एक कोड
System.out.println(Arrays.asList(String.valueOf(number).split("")).stream()
.map(Integer::valueOf)
.mapToInt(i->i)
.sum() == 1);
यह इनपुट 1 यानी 100 के लिए काम करता लिखा था लेकिन इनपुट 2 यानी 55 के लिए नहीं, जो मैं स्पष्ट रूप से समझता हूं कि दूसरे मामले में 10 आउटपुट है क्योंकि पुनरावृत्ति रिकर्सिव नहीं है।
तो मैं इस लैम्ब्स अभिव्यक्ति को रिकर्सिव कैसे बना सकता हूं ताकि यह दूसरे मामले में भी काम कर सके? मैं उस लैम्ब्डा अभिव्यक्ति के साथ एक विधि बना सकता हूं और इसे हर बार कॉल कर सकता हूं जब तक वापसी मूल्य < 10 नहीं है लेकिन मैं सोच रहा था कि लैम्बडास के भीतर कोई दृष्टिकोण है या नहीं।
धन्यवाद
आपका पूरा ऑपरेशन 'number.codePoints()। नक्शा (कैरेक्टर :: getNumericValue) .sum()' के लिए सरलीकृत किया जा सकता है, लेकिन आप नामित विधि के बिना इसे रिकर्सिव नहीं बना सकते हैं। – Holger
@ होल्गर नामित विधि के बिना रिकर्सिव लैम्बडा बनाने के [तरीके] (http://stackoverflow.com/q/19429667/335858) हैं। हालांकि, उन्हें नामित चर की आवश्यकता होती है। – dasblinkenlight
@dasblinkenlight: लेकिन एक नामित विधि के बजाय नामित चर का उपयोग करने से कोई फायदा नहीं मिलता है, लेकिन सामान्य रिकर्सन की तुलना में प्रत्येक रिकर्सिव चरण में अतिरिक्त स्टैक फ्रेम का उत्पादन करता है ... – Holger