順序は何でもかまいませんが、ルールの順序は変更しないでください。また、特定の注文ルールはグループに入れるべきです。
その場合、実際の並列処理の余地はありません。
いつ
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
は無効と見なされます。これは並列処理ではなく、ordersのランダム化であり、おそらくゲインなしです。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);
});
});
}
ストリーミングも必要ありません。入れ子になった2つのループだけです。テスト: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
元の答え
しかし、rules.forEach(rule-> {}}の順序を変更しています。
いいえ、違います。ordersが重複してもよいが、順rule各注文のSが保持されます。非パラレル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
orders の順序は混在していますが、rulesは常に1-2-3です。私はあなたの出力がペアリングを単に隠したと思います(実際には、それがどのように生成されたかを示していませんでした)
もちろん、それをいくつかの遅延で拡張することができるので、ordersの処理は実際にオーバーラップします:
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追跡することができ、可視だrulesは、1-2-3のようにくるごとorder。また、サンプルリストにはorder12度含まれていますが、何が起こっているのかを確認するのに役立ちませんでした。