मैं पूर्णांकों की सूची का योग करना चाहता हूं। यह निम्नानुसार काम करता है, लेकिन वाक्यविन्यास सही नहीं लगता है। क्या कोड को अनुकूलित किया जा सकता है?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> iव्यक्तिगत रूप से बहुत स्पष्ट है। ठीक है, हाँ आपको यह जानने की जरूरत है कि मूल्य स्वचालित रूप से अनबॉक्स किया जाएगा, लेकिन यह जावा 5 के बाद से सच है ...
foo(int i)नहीं लिखते foo(myInteger.intValue());हर बार वे इसे (या कम से कम मुझे नहीं उम्मीद !!)। मैं आपके साथ सहमत हूं जो Integer::intValueअधिक स्पष्ट है लेकिन मुझे लगता है कि यहां भी यही लागू होता है। लोगों को बस इसे एक बार सीखना चाहिए और फिर आपको :-) यह ऐसा नहीं है जैसे कि यह कुछ जादूई आक्षेप था।
i -> iनो-सेशन और conceptionally की तरह दिखता है, यह है एक नहीं-op। ज़रूर, हुड के नीचे Integer.intValue()बुलाया जाता है, लेकिन हुड के नीचे और भी गहरा, उस तरीके को बिल्कुल नो-ऑप बनने के लिए इनबिल्ट हो जाता है जो कि सोर्स कोड में दिखता है। Integer::intValueबाइट कोड में सिंथेटिक विधि नहीं बनाने का बोनस बिंदु है, लेकिन यह नहीं है कि आपके स्रोत कोड को कैसे व्यवस्थित किया जाए, इसके बारे में आपका निर्णय लेना चाहिए।
mapToLongउन ओवरफ्लो से बचने के लिए उपयोग करना चाहते हैं , जो आपके मानचित्र के मूल्यों के आधार पर हो सकते हैं।