Tôi đã cố gắng chuyển đổi một mảng int thành List và tôi đã sử dụng lộ trình lạ khi sử dụng Java 8 Stream và đã đưa ra điều này
Arrays.stream(arr).boxed().collect(Collectors.toList());
Tôi vẫn gặp khó khăn để hiểu đầy đủ về dòng này, chủ yếu,
Tại sao
Collectors.toList()
trong trường hợp này trả về một giao diệnArrayList<Integer>
thực hiệnList
? Tại sao khôngLinkedList<Integer>
hoặc bất kỳ lớp chung nào khác phù hợp vớiList
giao diện? Tôi không thể tìm thấy bất cứ điều gì về điều này, ngoại trừ việc đề cập ngắn gọn về ArrayList ở đây , trong phần Ghi chú API.Bảng điều khiển bên trái có nghĩa là gì? Rõ ràng là loại trả về chung ( trong mã của tôi ở đây). Và tôi nghĩ là đối số kiểu chung của phương thức, nhưng chúng được chỉ định như thế nào? Tôi đã xem tài liệu giao diện Collector và không thể tiếp thu nó.
Stream.collect()
R
ArrayList<Integer>
<R, A>
Collectors.toList()
trong trường hợp này trả về ArrayList<Integer>
" Nó có thể không trả về ArrayList
. Việc List
triển khai không được xác định , vì vậy bạn không thể dựa vào việc triển khai nó trả về. Như javadoc nói: "Không có gì đảm bảo về loại , tính dễ biến đổi, tính tuần tự hoặc tính an toàn của luồng của Danh sách được trả về;"
toList()
sẽ không trả lại một ArrayList
hoặc List
- nó đang trả lại một Collector
, cuối cùng sẽ tạo và trả về một List
- cũng là tài liệu nêu rõ: "... Không có gì đảm bảo về loại , tính biến đổi, tính tuần tự hoặc tính an toàn của danh sách được trả về; nếu cần thêm quyền kiểm soát Danh sách được trả lại, hãy sử dụng toCollection (Nhà cung cấp) .... "
R
là loại chung của loại kết quả.A
loại chung của loại tích lũy trung gian của Collector. Đó là chi tiết triển khai về cách thức hoạt động của một bộ sưu tập. Nó phân chia và chinh phục, cũng để xử lý song song, thu thập đầu tiên thành các loại trung gian.