Tôi cố gắng để cung cấp câu trả lời của câu hỏi của bạn như tôi đọc ở đâu đó -
<R,A> R collect(Collector<? super T,A,R> collector)
R - loại kết quả A - loại tích lũy trung gian của các nhà sưu tập Collector - Collector mô tả giảm Lợi nhuận - kết quả của việc giảm
Thực hiện thao tác giảm đột biến trên các phần tử của luồng này bằng Bộ sưu tập. Bộ sưu tập đóng gói các chức năng được sử dụng làm đối số để thu thập (Nhà cung cấp, BiConsumer, BiConsumer), cho phép tái sử dụng các chiến lược thu thập và thành phần của các hoạt động thu thập như phân nhóm nhiều cấp hoặc phân vùng. Nếu luồng song song và Bộ thu là đồng thời và luồng không có thứ tự hoặc bộ thu không theo thứ tự thì việc giảm đồng thời sẽ được thực hiện (xem Bộ thu để biết chi tiết về giảm đồng thời.)
Đây là thiết bị đầu cuối hoạt động.
Khi được thực thi song song, nhiều kết quả trung gian có thể được khởi tạo, được điền và hợp nhất để duy trì sự cô lập cấu trúc dữ liệu có thể thay đổi. Do đó, ngay cả khi được thực thi song song với các cấu trúc dữ liệu không an toàn (chẳng hạn như ArrayList), không cần đồng bộ hóa bổ sung để giảm song song.
Sau đây sẽ tích lũy chuỗi thành một ArrayList:
List<String> asList = stringStream.collect(Collectors.toList());
Sau đây sẽ phân loại đối tượng Person của nhà nước và thành phố, tầng hai thu gom với nhau:
Map<String, Map<String, List<Person>>> peopleByStateAndCity
= personStream.collect(Collectors.groupingBy(Person::getState,
Collectors.groupingBy(Person::getCity)));
Tôi cho rằng bạn đã biết rằng bạn có thể làm điều đúng bằng cách chuỗi các lệnh 'map',' filter' và 'collect'. Vì vậy, mục đích của yêu cầu của bạn để làm điều đó trong một cuộc gọi phương thức là gì? Bởi vì điều đó "cảm thấy" như là hiệu quả hơn? – Holger
@Holger Nó liên kết tiền tố với hàm ánh xạ, giúp làm rõ một _is_ một điều kiện trước cho điều kiện khác, cũng như làm cho nó không thể phá vỡ mã bằng cách thay đổi thứ tự của các cuộc gọi phương thức. –
Thực ra, điều ngược lại. Không ai có thể nói từ chữ ký của một phương thức có chứa hàm ánh xạ và một vị từ được áp dụng trước tiên. Ngược lại, với API 'Stream', mọi người hiểu được sự khác biệt giữa' map (…) .filter (…) .collect (…) 'và' .filter (…) .map (…) .collect (…) '. Và thậm chí có thể suy ra ý nghĩa của các kết hợp khác như 'map (…) .filter (…) .map (…) .collect (…)'… – Holger