मैं ऐसी विधि लिखने की कोशिश कर रहा हूं जो सूचियों की सूची में ऑब्जेक्ट के सूचकांक पाता है और समांतरता का लाभ उठाता है। मेरा कोड यहाँ है।सूचियों की सूची में किसी ऑब्जेक्ट को खोजने के लिए धाराओं का उपयोग
// returns [i, j] where lists.get(i).get(j) equals o, or null if o is not present.
public static int[] indices(List<? extends List<?>> lists, Object o) {
return IntStream.range(0, lists.size())
.boxed()
.flatMap(i -> IntStream.range(0, lists.get(i).size()).mapToObj(j -> new int[]{i, j}))
.parallel()
.filter(a -> {
System.out.println(Arrays.toString(a)); // For testing only
return Objects.equals(o, lists.get(a[0]).get(a[1]));
})
.findAny()
.orElse(null);
}
जब मैं निम्नलिखित कोड चलाने
List<List<String>> lists = Arrays.asList(
Arrays.asList("A", "B", "C"),
Arrays.asList("D", "E", "F", "G"),
Arrays.asList("H", "I"),
Collections.nCopies(5, "J")
);
System.out.println("Indices are " + Arrays.toString(indices(lists, "J")));
उत्पादन की तरह
[0, 0]
[0, 1]
[0, 2]
[3, 0]
[3, 1]
[3, 2]
[3, 3]
[2, 0]
[3, 4]
[1, 0]
[1, 1]
[2, 1]
[1, 2]
[1, 3]
Indices are [3, 0]
दूसरे शब्दों में कुछ, खोज जारी है के बाद भी वस्तु पाया गया है है। findAny
एक शॉर्ट-सर्किटिंग ऑपरेशन नहीं माना जाता है? मैं क्या खो रहा हूँ? साथ ही, सूचियों की सूची या एक जंजीर सरणी पर पुनरावृत्ति करते समय समांतरता का लाभ उठाने का सबसे अच्छा तरीका क्या है?
संपादित
में @ सोटीरिओस का जवाब विचार के बाद, मैं का उत्पादन मिला
Thread[ForkJoinPool.commonPool-worker-3,5,main] [3, 0]
Thread[main,5,main] [2, 0]
Thread[main,5,main] [2, 1]
Thread[ForkJoinPool.commonPool-worker-1,5,main] [1, 0]
Thread[ForkJoinPool.commonPool-worker-1,5,main] [1, 1]
Thread[ForkJoinPool.commonPool-worker-1,5,main] [1, 2]
Thread[ForkJoinPool.commonPool-worker-1,5,main] [1, 3]
Thread[main,5,main] [0, 0]
Thread[main,5,main] [0, 1]
Thread[ForkJoinPool.commonPool-worker-3,5,main] [3, 1]
Thread[main,5,main] [0, 2]
Thread[ForkJoinPool.commonPool-worker-3,5,main] [3, 2]
Thread[ForkJoinPool.commonPool-worker-3,5,main] [3, 3]
Thread[ForkJoinPool.commonPool-worker-3,5,main] [3, 4]
Indices are [3, 0]
सूचना है कि
Thread[ForkJoinPool.commonPool-worker-3,5,main]
के बाद भी जवाब पाया जाता है खोज जारी है।
इसके बजाय फर्स्ट() का उपयोग करें। –
@TaharBakir यह अभी भी खोज जारी है। –
इसके अलावा, समांतरता कुछ समय ले सकती है इससे पहले कि एक धागा दूसरों को सूचित कर सके कि उन्हें जारी रखने की आवश्यकता नहीं है। –