Urutan pesanan bisa apa saja, tetapi urutan aturan tidak boleh berubah. Juga untuk aturan pesanan tertentu harus datang dalam grup.
Jika itu masalahnya, tidak ada ruang untuk paralelisme yang sebenarnya.
Kapan
order1-rule1
order1-rule2
order2-rule1
order2-rule2
dan
order2-rule1
order2-rule2
order1-rule1
order1-rule2
hanya menjalankan yang valid untuk 2 pesanan dan 2 aturan,
dan
order1-rule1
order2-rule1
order1-rule2
order2-rule2
dianggap tidak valid, itu bukan paralelisme, hanya pengacakan order
s, mungkin tanpa keuntungan. Jika Anda "bosan" dengan order1
datang pertama kali, Anda dapat mengacak daftar, tetapi hanya itu:
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);
});
});
}
Bahkan streaming tidak diperlukan, hanya dua loop bersarang. Uji: 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
Jawaban asli
Tapi itu mengubah pesanan rules.forEach (rule -> {}}.
Tidak. The order
s mungkin tumpang tindih, tetapi urutan rule
s untuk setiap pesanan disimpan. Mengapa non-paralel forEach
melakukan hal lain?
Kode contoh:
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);
});
});
}
Uji: https://ideone.com/95Cybg
Contoh keluaran:
order2-rule1
order2-rule2
order2-rule3
order1-rule1
order1-rule2
order1-rule3
order4-rule1
order4-rule2
order4-rule3
order3-rule1
order3-rule2
order3-rule3
Urutan order
s dicampur, tetapi rule
selalu 1-2-3. Saya pikir output Anda hanya menyembunyikan pasangan (sebenarnya Anda tidak menunjukkan bagaimana itu dihasilkan).
Tentu saja dapat diperpanjang dengan beberapa penundaan, jadi pemrosesan order
s sebenarnya akan tumpang tindih:
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);
});
});
}
Uji: https://ideone.com/cSFaqS
Contoh keluaran:
order3-rule1
order2-rule1
order2-rule2
order3-rule2
order3-rule3
order2-rule3
order1-rule1
order4-rule1
order1-rule2
order4-rule2
order4-rule3
order1-rule3
Ini mungkin sesuatu yang Anda lihat, hanya tanpa orderx
bagian. Dengan order
s yang terlihat, dapat dilacak yang rule
terus menjadi 1-2-3, perorder
. Juga, daftar contoh Anda berisi order1
dua kali yang pasti tidak membantu dalam melihat apa yang terjadi.