Tôi đang xem các tài liệu cho IntStream
và tôi thấy một toArray
phương pháp, nhưng không có cách nào để đi thẳng đếnList<Integer>
Chắc chắn có một cách để chuyển đổi Stream
a List
?
Tôi đang xem các tài liệu cho IntStream
và tôi thấy một toArray
phương pháp, nhưng không có cách nào để đi thẳng đếnList<Integer>
Chắc chắn có một cách để chuyển đổi Stream
a List
?
Câu trả lời:
IntStream::boxed
IntStream::boxed
biến một IntStream
thành một Stream<Integer>
, mà sau đó bạn có thể collect
thành một List
:
theIntStream.boxed().collect(Collectors.toList())
Các boxed
phương pháp chuyển đổi các int
giá trị nguyên thủy của một IntStream
thành một dòng suối của Integer
các đối tượng. Từ "đấm bốc" tên các int
⬌ Integer
quá trình chuyển đổi. Xem Hướng dẫn của Oracle .
toList
. Điều này được thực hiện bằng cách đặt các mục sau trong số các tệp nhập : static import java.util.stream.Collectors.toList;
. Sau đó, cuộc gọi thu thập chỉ đọc .collect(toList())
.
Collectors
lớp trong Tùy chọn -> Java -> Trình chỉnh sửa -> Hỗ trợ nội dung -> Mục ưa thích . Sau này, bạn chỉ phải gõ toLi
tại hit Ctr + Space để điền vào IDE toList
và thêm nhập tĩnh.
boxed()
phần
Bạn cũng có thể sử dụng mapToObj () trên Luồng, trong đó có một IntFactor và trả về một luồng có giá trị đối tượng bao gồm các kết quả của việc áp dụng hàm đã cho cho các phần tử của luồng này.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
được ủy thác.
Bạn có thể sử dụng các bộ sưu tập nguyên thủy có sẵn trong Bộ sưu tập Eclipse và tránh đấm bốc.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Lưu ý: Tôi là người đóng góp cho Bộ sưu tập Eclipse.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Tìm ví dụ về việc tìm bình phương của mỗi phần tử int bằng Java 8: -
IntStream ints = Arrays.stream(new int[] {1,2,3,4,5});
List<Integer> intsList = ints.map(x-> x*x)
.collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);
Bạn có thể sử dụng phương pháp thu thập:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
Trong thực tế, đây gần như chính xác những gì Java đang làm khi bạn gọi .collect (Collector.toList ()) trên luồng đối tượng:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Lưu ý: Tham số thứ ba chỉ được yêu cầu nếu bạn muốn chạy bộ sưu tập song song; cho bộ sưu tập tuần tự chỉ cung cấp hai cái đầu tiên là đủ.