2017-12-28 147 views
21

का उपयोग कर सूची में मूल्यों का योग कैसे करें I जावा 8 का उपयोग कर List<int[]> का योग ढूंढना चाहता हूं। यह मेरा प्रयास है। जावा 8

int sum = counts.stream().flatMap(i -> Stream.of(i).mapToInt(m)).sum(); 

हालांकि, मैं त्रुटि Stream<Object> को परिवर्तित नहीं कर सकते <unknown> को मिलता है।

+3

कृपया/जब में प्रवेश एक पोस्ट को संपादित पूर्वावलोकन क्षेत्र पर ध्यान देना। एम्बेडेड कोण ब्रैकेट को कोड के रूप में स्वरूपित किया जाना चाहिए (बैकटिक्स का उपयोग करके) या वे गायब हो जाते हैं। –

+1

क्या आप '.mapToInt (m)' करने का इरादा रखते हैं? 'एम' क्या है? – AJNeufeld

+2

लूप के लिए एक डबल के बारे में कैसे? – John

उत्तर

30

आप flatMap हैं:

int sum=counts.stream() 
       .mapToInt(ar->IntStream.of(ar).sum()) // convert each int[] to the sum 
                // of that array and transform the 
                // Stream to an IntStream 
       .sum(); // calculate the total sum 
7

आपका i एक आदिम सरणी (int[]) है, इसलिए Stream.of(i)Stream<int[]> वापस करेगा।

मैं सुझाव है कि आप पहले प्रत्येक व्यक्ति सरणी के योग की गणना और फिर उन सभी को योग:

int sum = counts.stream()        // getting Stream<int[]> 
       .mapToInt(a -> Arrays.stream(a).sum()) // getting an IntStream with the sum of every int[] 
       .sum();         // getting the total sum of all values. 
+4

दो मैप कॉल की कोई ज़रूरत नहीं है: 'counts.stream()। MapToInt (ar -> IntStream.of (ar) .sum())। Sum() ' – Andreas

+0

धन्यवाद, मैं वास्तव में समझाने के लिए समय की सराहना करता हूं कि कैसे ' – BreenDeen

+0

@ एंड्रियास आप बिल्कुल सही हैं। धन्यवाद – Eran

14
int sum = counts.stream().flatMapToInt(array -> IntStream.of(array)).sum(); 
+2

या 'flatMapToInt (Arrays :: stream) 'विधि संदर्भ का उपयोग करके, और' Arrays.stream() ', क्योंकि यह आंतरिक रूप से' IntStream.of() 'कॉल है। – Andreas

+6

हाँ, या इंटस्ट्रीम :: का। हालांकि, मुझे नए लोगों के लिए लैम्ब्डा थोड़ा स्पष्ट लगता है। –

+1

एक int [] का योग लेना सीधे अधिक कुशल होगा (जैसा कि आप यहां कर रहे हैं)? ऐसा लगता है जैसे आपका कोड थोड़ा और वर्बोज़ है लेकिन इंटीजर को कम ऑटोबॉक्सिंग है। – markspace

5

आप इसे इस तरह से कर सकते हैं एक इंटस्ट्रीम के लिए। उसके बाद, राशि लेना आसान है।

int sum = counts.stream() 
     .flatMapToInt(IntStream::of) 
     .sum(); 
2

यह मेरे लिए काम किया:

int sum = counts.stream().mapToInt(i -> Arrays.stream(i).sum()).sum();