Trong các thư viện lambda nặng trước Java 8 như Guava, các kết quả đầu ra sử dụng các giao diện Khung công tác Java chung để dễ dàng chuyển chúng sang các API bên ngoài / bên trong và vẫn khai thác một số tính toán lười biếng nếu phương thức thư viện thực hiện (ví dụ như lười filter()
và transform()
).
Tuy nhiên, trong Luồng Java 8, lệnh gọi lấy Collection
/ Map
là thiết bị đầu cuối (tức là háo hức) và nó cũng sẽ phân bổ các cấu trúc dữ liệu mới để giữ kết quả.
Đối với các tính toán phức tạp với nhiều giai đoạn và mô hình chiến lược ở giữa, điều này gây ra rất nhiều phân bổ không cần thiết do kết quả trung gian.
Vì vậy, mọi người có nghĩ rằng đó là một cách thực hành tốt cho các API nội bộ (tức là các chiến lược mẫu chiến lược) để lấy và trả lại Stream
cho tôi hay tôi chỉ nên dựa vào các API lười biếng nhưng không được sắp xếp hợp lý (tôi dự định chơi chữ)?
Biên tập:
Mối quan tâm chính của tôi Stream
là nó chỉ có thể được tiêu thụ một lần và vượt qua một cái gì đó Supplier<Stream<X>>
trông có vẻ cực kỳ cồng kềnh. Nó gần như thúc đẩy bạn chỉ cần vượt qua Collection
và sau đó trả lại stream()
(và trả chi phí đánh giá háo hức vào thời điểm đó).