Tôi đang xem các tài liệu cho IntStreamvà tôi thấy một toArrayphươ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 Streama List?
Tôi đang xem các tài liệu cho IntStreamvà tôi thấy một toArrayphươ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 Streama List?
Câu trả lời:
IntStream::boxedIntStream::boxedbiến một IntStreamthành một Stream<Integer>, mà sau đó bạn có thể collectthành một List:
theIntStream.boxed().collect(Collectors.toList())
Các boxedphương pháp chuyển đổi các intgiá trị nguyên thủy của một IntStreamthành một dòng suối của Integercác đối tượng. Từ "đấm bốc" tên các int⬌ Integerquá 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()).
Collectorslớ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õ toLitại hit Ctr + Space để điền vào IDE toListvà 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à đủ.