Thứ tự của các đơn đặt hàng có thể là bất cứ điều gì, nhưng thứ tự của các quy tắc không nên thay đổi. Ngoài ra đối với một quy tắc đặt hàng cụ thể nên đi trong một nhóm.
Nếu đó là trường hợp, không có chỗ cho sự song song thực tế.
Khi nào
order1-rule1
order1-rule2
order2-rule1
order2-rule2
và
order2-rule1
order2-rule2
order1-rule1
order1-rule2
là các lần chạy hợp lệ duy nhất cho 2 đơn đặt hàng và 2 quy tắc
và
order1-rule1
order2-rule1
order1-rule2
order2-rule2
được coi là không hợp lệ, đó không phải là song song, chỉ là ngẫu nhiên của order
s, có lẽ không có lợi. Nếu bạn "chán" với việc order1
đến trước mọi lúc, bạn có thể xáo trộn danh sách, nhưng đó là tất cả:
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);
});
});
}
Thậm chí không cần phát trực tuyến, chỉ cần hai vòng lặp lồng nhau. Kiểm tra: 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
Câu trả lời gốc
Nhưng nó đang thay đổi thứ tự quy tắc.forEach (quy tắc -> {}}.
Không nó không. Cácorder
s có thể trùng nhau, nhưng thứ tự của rule
s cho mỗi đơn hàng được giữ. Tại sao một người không song song forEach
làm bất cứ điều gì khác?
Mã ví dụ:
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);
});
});
}
Kiểm tra: https://ideone.com/95Cybg
Ví dụ đầu ra:
order2-rule1
order2-rule2
order2-rule3
order1-rule1
order1-rule2
order1-rule3
order4-rule1
order4-rule2
order4-rule3
order3-rule1
order3-rule2
order3-rule3
Lệnh của order
s là hỗn hợp, nhưng rule
s luôn là 1-2-3. Tôi nghĩ rằng đầu ra của bạn chỉ đơn giản là ẩn các cặp (thực ra bạn không cho thấy nó được tạo như thế nào).
Tất nhiên nó có thể được gia hạn với một số độ trễ, vì vậy xử lý order
s sẽ thực sự trùng lặp:
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);
});
});
}
Kiểm tra: https://ideone.com/cSFaqS Kết
quả đầu ra:
order3-rule1
order2-rule1
order2-rule2
order3-rule2
order3-rule3
order2-rule3
order1-rule1
order4-rule1
order1-rule2
order4-rule2
order4-rule3
order1-rule3
Đây có thể là một cái gì đó bạn đã thấy, chỉ cần không có orderx
phần. Với order
s có thể nhìn thấy, nó có thể được theo dõi mà rule
tiếp tục là 1-2-3, mỗiorder
. Ngoài ra, danh sách ví dụ của bạn chứa order1
hai lần mà chắc chắn không giúp ích gì trong việc nhìn thấy những gì đang xảy ra.