यहाँ List<Integer>
के बजाय स्रोत के रूप में IntStream
का उपयोग कर एक समाधान दो int
सरणियों के साथ है। मैं देखना चाहता था कि के रूप में प्रत्येक int
मुक्केबाजी के बिना इस समस्या को हल करना संभव था या नहीं।
int[] one = new int[]{1, 2, 3};
int[] two = new int[]{3, 4};
List<IntIntPair> list = new ArrayList<>();
IntStream.of(one).forEach(i ->
IntStream.of(two).mapToObj(j -> PrimitiveTuples.pair(i, j)).forEach(list::add));
System.out.println(list);
// [1:3, 1:4, 2:3, 2:4, 3:3, 3:4]
दुर्भाग्य से, मैं के रूप में यह एक IntStream
रिटर्न IntStream
पर flatMap
उपयोग नहीं कर सका। वर्तमान में पर IntStream
पर कोई आवश्यकता नहीं है, जो यहां आवश्यक है। तो मैंने इसके बजाय forEach
का उपयोग किया।
IntIntPair
और PrimitiveTuples
कक्षाएं जिन्हें मैंने Eclipse Collections से उपयोग किया था, क्योंकि उन्होंने स्ट्रिंग के रूप में सूची को आउटपुट करना आसान बना दिया था। आप अपने समाधान में int[]
का उपयोग कर सकते हैं। कोड निम्नानुसार दिखेगा।
List<int[]> list = new ArrayList<>();
IntStream.of(one).forEach(i ->
IntStream.of(two).mapToObj(j -> new int[]{i, j}).forEach(list::add));
ग्रहण संग्रह का 8.1 विज्ञप्ति में (मध्य मार्च जारी होने की), वहाँ अब है पुस्तकालय में सभी आदिम कंटेनर जो इस समस्या को हल करने के लिए इस्तेमाल किया जा सकता पर एक flatCollect
विधि। यह अनिवार्य रूप से विधि IntStream
पर करना चाहिए।
IntList a = IntLists.mutable.with(1, 2, 3);
IntList b = IntLists.mutable.with(3, 4);
List<IntIntPair> result =
a.flatCollect(
i -> b.collect(j -> PrimitiveTuples.pair(i, j)),
Lists.mutable.empty());
System.out.println(result);
// [1:3, 1:4, 2:3, 2:4, 3:3, 3:4]
अद्यतन:
रूप से बोरिस स्पाइडर टिप्पणी में कहा, forEach
समाधान धागा सुरक्षित नहीं होगा और यदि IntStream
parallel
था टूट जाएगा। निम्नलिखित समाधान धारावाहिक या समांतर में काम करना चाहिए। मुझे खुशी है कि यह इंगित किया गया था, क्योंकि मैंने IntStream
पर mapToObj
और उसके बाद flatMap
पर विचार नहीं किया था।
int[] one = new int[]{1, 2, 3};
int[] two = new int[]{3, 4};
List<int[]> list = IntStream.of(one).parallel()
.mapToObj(i -> IntStream.of(two).mapToObj(j -> new int[]{i, j}))
.flatMap(e -> e)
.collect(Collectors.toList());
list.stream().map(e -> "{" + e[0] + "," + e[1] + "}").forEach(System.out::println);
नोट: मैं Eclipse Collections के लिए एक कमिटर हूं।
http://stackoverflow.com/a/34784924/1849366 –
यह flatMap के प्रयोग पर काम किया() –
शायद आप कार्टेशियन उत्पाद के बारे में कुछ देखना चाहते हैं। लेकिन इस मामले में मैं दो लूप के लिए दो की सिफारिश करता हूं क्योंकि यह किसी भी जावा 8 स्ट्रीम जादू की तुलना में कहीं अधिक पठनीय होगा। – evgenii