का उपयोग कर सूची
List<int[]>
का योग ढूंढना चाहता हूं। यह मेरा प्रयास है।
int sum = counts.stream().flatMap(i -> Stream.of(i).mapToInt(m)).sum();
हालांकि, मैं त्रुटि Stream<Object>
को परिवर्तित नहीं कर सकते <unknown>
को मिलता है।
का उपयोग कर सूची
List<int[]>
का योग ढूंढना चाहता हूं। यह मेरा प्रयास है।
int sum = counts.stream().flatMap(i -> Stream.of(i).mapToInt(m)).sum();
हालांकि, मैं त्रुटि Stream<Object>
को परिवर्तित नहीं कर सकते <unknown>
को मिलता है।
आप 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
आपका 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.
int sum = counts.stream().flatMapToInt(array -> IntStream.of(array)).sum();
या 'flatMapToInt (Arrays :: stream) 'विधि संदर्भ का उपयोग करके, और' Arrays.stream() ', क्योंकि यह आंतरिक रूप से' IntStream.of() 'कॉल है। – Andreas
हाँ, या इंटस्ट्रीम :: का। हालांकि, मुझे नए लोगों के लिए लैम्ब्डा थोड़ा स्पष्ट लगता है। –
एक int [] का योग लेना सीधे अधिक कुशल होगा (जैसा कि आप यहां कर रहे हैं)? ऐसा लगता है जैसे आपका कोड थोड़ा और वर्बोज़ है लेकिन इंटीजर को कम ऑटोबॉक्सिंग है। – markspace
आप इसे इस तरह से कर सकते हैं एक इंटस्ट्रीम के लिए। उसके बाद, राशि लेना आसान है।
int sum = counts.stream()
.flatMapToInt(IntStream::of)
.sum();
यह मेरे लिए काम किया:
int sum = counts.stream().mapToInt(i -> Arrays.stream(i).sum()).sum();
कृपया/जब में प्रवेश एक पोस्ट को संपादित पूर्वावलोकन क्षेत्र पर ध्यान देना। एम्बेडेड कोण ब्रैकेट को कोड के रूप में स्वरूपित किया जाना चाहिए (बैकटिक्स का उपयोग करके) या वे गायब हो जाते हैं। –
क्या आप '.mapToInt (m)' करने का इरादा रखते हैं? 'एम' क्या है? – AJNeufeld
लूप के लिए एक डबल के बारे में कैसे? – John