आदेशों का क्रम कुछ भी हो सकता है, लेकिन नियमों का क्रम नहीं बदलना चाहिए। इसके अलावा एक विशेष आदेश के लिए नियम एक समूह में आना चाहिए।
यदि ऐसा है, तो वास्तविक समानता के लिए कोई जगह नहीं है।
कब
order1-rule1
order1-rule2
order2-rule1
order2-rule2
तथा
order2-rule1
order2-rule2
order1-rule1
order1-rule2
2 आदेशों और 2 नियमों के लिए केवल वैध रन हैं,
और
order1-rule1
order2-rule1
order1-rule2
order2-rule2
अवैध माना जाता है, यह समानता नहीं है, बस यादृच्छिककरण है order
, संभवतः लाभ के बिना। यदि आप order1
हर समय पहले आने के साथ "ऊब" रहे हैं , तो आप सूची में फेरबदल कर सकते हैं, लेकिन यह सब है:
public static void main (String[] args) throws java.lang.Exception
{
List<String> orders = Arrays.asList("order1", "order2", "order3", "order4");
List<String> rules = Arrays.asList("rule1", "rule2", "rule3");
Collections.shuffle(orders);
orders.forEach(order->{
rules.forEach(rule->{
System.out.println(order+"-"+rule);
});
});
}
स्ट्रीमिंग भी आवश्यक नहीं है, बस दो नेस्टेड छोरों। टेस्ट: https://ideone.com/qI3dqd
order2-rule1
order2-rule2
order2-rule3
order4-rule1
order4-rule2
order4-rule3
order1-rule1
order1-rule2
order1-rule3
order3-rule1
order3-rule2
order3-rule3
मूल उत्तर
लेकिन यह नियमों को बदल रहा है। प्रत्येक नियम (नियम -> {}} आदेश।
नहीं, यह नहीं है। order
रों ओवरलैप हो सकता है, लेकिन के आदेश rule
प्रत्येक आदेश के लिए रों रखा जाता है। एक गैर-समानांतर क्यों होगाforEach
कुछ और ?
उदाहरण कोड:
public static void main (String[] args) throws java.lang.Exception
{
List<String> orders = Arrays.asList("order1", "order2", "order3", "order4");
List<String> rules = Arrays.asList("rule1", "rule2", "rule3");
orders.stream().parallel().forEach(order->{
rules.forEach(rule->{
System.out.println(order+"-"+rule);
});
});
}
टेस्ट: https://ideone.com/95Cybg
उदाहरण आउटपुट:
order2-rule1
order2-rule2
order2-rule3
order1-rule1
order1-rule2
order1-rule3
order4-rule1
order4-rule2
order4-rule3
order3-rule1
order3-rule2
order3-rule3
एस का क्रम order
मिश्रित है, लेकिन rule
एस हमेशा 1-2-3 होते हैं। मुझे लगता है कि आपका आउटपुट बस युग्मों को छिपाता है (वास्तव में आपने यह नहीं दिखाया कि यह कैसे उत्पन्न होता है)।
बेशक, इसे कुछ देरी के साथ बढ़ाया जा सकता है, इसलिए एस का प्रसंस्करण order
वास्तव में ओवरलैप होगा:
public static void delay(){
try{
Thread.sleep(ThreadLocalRandom.current().nextInt(100,300));
}catch(Exception ex){}
}
public static void main (String[] args) throws java.lang.Exception
{
List<String> orders = Arrays.asList("order1", "order2", "order3", "order4");
List<String> rules = Arrays.asList("rule1", "rule2", "rule3");
orders.stream().parallel().forEach(order->{
rules.forEach(rule->{
delay();
System.out.println(order+"-"+rule);
});
});
}
परीक्षण: https://ideone.com/cSFaqS
उदाहरण आउटपुट:
order3-rule1
order2-rule1
order2-rule2
order3-rule2
order3-rule3
order2-rule3
order1-rule1
order4-rule1
order1-rule2
order4-rule2
order4-rule3
order1-rule3
यह कुछ ऐसा हो सकता है जिसे आपने देखा है, सिर्फ orderx
भाग के बिना । साथ order
दृश्यमान है यह पता लगाया जा सकता है कि rule
रों 1-2-3 आते हैं, प्रतिorder
। साथ ही, आपकी उदाहरण सूची में order1
दो बार निहित है जो यह देखने में मदद नहीं करता है कि क्या हो रहा था।