অর্ডার ক্রম কিছু হতে পারে, তবে নিয়মের ক্রম পরিবর্তন করা উচিত নয়। এছাড়াও একটি নির্দিষ্ট আদেশের নিয়মের জন্য একটি দলে আসা উচিত।
যদি এটি হয় তবে প্রকৃত সমান্তরালতার কোনও জায়গা নেই।
কখন
order1-rule1
order1-rule2
order2-rule1
order2-rule2
এবং
order2-rule1
order2-rule2
order1-rule1
order1-rule2
2 টি আদেশ এবং 2 বিধিগুলির জন্য একমাত্র বৈধ রান
and
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
আসল উত্তর
তবে এটি নিয়মগুলি পরিবর্তন করছে for প্রতিটি (বিধি -> {}} অর্ডার)।
না, তা হয় না। 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
S এর ক্রম মিশ্রিত হয় তবে rule
s সর্বদা 1-2-2 হয়। আমি মনে করি আপনার আউটপুটটি জুটিগুলি কেবল লুকিয়ে রেখেছে (আসলে আপনি কীভাবে এটি উত্পন্ন হয়েছিল তা দেখান নি)।
অবশ্যই এটি কিছু বিলম্বের সাথে বাড়ানো যেতে পারে, সুতরাং এর প্রসেসিং 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
দু'বার রয়েছে যা অবশ্যই ঘটছে তা দেখতে সহায়তা করে নি।