Tại sao là CompletableFuture.allOf
được khai báo là CompletableFuture<Void>
và không trả về bộ sưu tập kết quả hoặc thứ gì khác? Tôi nghĩ rằng đó là ý tưởng tốt để thực hiện CompletableFuture.anyOf
trả lại CompletableFuture<Object>
, nhưng tôi thấy hai phương pháp này được kết nối và vì vậy tôi nhầm lẫn về những gì họ quay trở lại.Tại sao CompletableFuture.allOf được khai báo là CompletableFuture <Void>?
Trả lời
anyOf
phải bằng cách nào đó cho bạn biết kết quả của số CompletableFuture
cụ thể đã hoàn thành được kích hoạt anyOf
là gì. Điều đó không cần thiết trong trường hợp của allOf
vì bạn biết tương lai nào đã hoàn thành - tất cả chúng.
allOf
(giống như anyOf
) không yêu cầu tất cả các loại tương lai đều có cùng loại. Vì vậy, nếu nó là để trở về một tương lai của bộ sưu tập, nó sẽ phải là một bộ sưu tập của Object
mà có lẽ không phải là những gì bạn muốn anyway.
Nếu bạn thực sự muốn có allOf
trả về một tương lai của bộ sưu tập, nó khá đơn giản để viết riêng của bạn:
public static CompletableFuture<List<Object>> myAllOf(CompletableFuture<?>... futures) {
return CompletableFuture.allOf(futures)
.thenApply(x -> Arrays.stream(futures)
.map(f -> (Object) f.join())
.collect(toList())
);
}
Nếu bạn có một phiên bản kiểu an về vấn đề này và cần phải chuyển đổi một tập hợp các tương lai của một loại nhất định cho tương lai của bộ sưu tập cùng loại đó, hãy xem câu hỏi này cho một số ví dụ: List<Future> to Future<List> sequence
Cảm ơn lời giải thích của bạn, nhưng dù sao tôi không thể hiểu tại sao 'allOf' không thể trả lại luồng của CompletableFuture hoặc kết quả hoặc smth khác ... – Everv0id
- 1. Tại sao lớp java.util.Scanner được khai báo là 'cuối cùng'?
- 2. Tại sao WebMethod được khai báo là Tĩnh?
- 3. tại sao hằng số java được khai báo là tĩnh?
- 4. Tại sao lớp HttpServlet được khai báo là trừu tượng?
- 5. Khai báo JAXB là phụ thuộc. Tại sao?
- 6. Tại sao ai đó sử dụng toán tử << trong khai báo enum?
- 7. Java 8 CompletableFuture.allOf (...) với Bộ sưu tập hoặc Danh sách
- 8. Tại sao không thể null được khai báo const?
- 9. Tại sao một khai báo enum được đánh dấu const?
- 10. Tại sao đọc không được khai báo covariant?
- 11. Actionscript biến khai báo là * (sao) gõ
- 12. Tại sao Comparator lại khai báo bằng?
- 13. Tại sao NULL không khai báo?
- 14. Tại sao phương thức được ủy quyền là công khai khi được khai báo trong phần riêng tư?
- 15. Tại sao System.in được khai báo là nullInputStream() thay vì null?
- 16. Tại sao C# giới hạn tập các loại có thể được khai báo là const?
- 17. Tại sao tệp aspx code-behind được khai báo là các lớp một phần?
- 18. Tại sao trường này được khai báo là riêng tư và cũng chỉ đọc?
- 19. Tại sao các hàm chuỗi cần được khai báo là '__cdecl'?
- 20. Tại sao một khai báo typedef không được gọi là định nghĩa typedef?
- 21. Tại sao là <> niêm phong?
- 22. Tại sao chúng ta nên khai báo các phương thức giao diện là công khai?
- 23. CompletableFuture supplyAsync
- 24. Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
- 25. Tại sao auto-boxing được đánh dấu là cảnh báo?
- 26. Trả lại hoàn tấtFuture <Void> hoặc CompletableFuture <?>?
- 27. Tại sao InitializeComponent là công khai
- 28. Tại sao chờ() và thông báo() được khai báo trong lớp Object của Java?
- 29. Tại sao là HashSet <T> .IsReadOnly rõ ràng?
- 30. Tại sao các tổ chức ẩn danh toàn cầu được yêu cầu phải được khai báo là tĩnh?
Điều đó sẽ yêu cầu tạo trước 'Danh sách', ngay cả khi người gọi không bao giờ truy vấn nó. – Holger