ฉันกำลังดูเอกสารสำหรับIntStream
และฉันเห็นtoArray
วิธีการ แต่ไม่สามารถไปที่List<Integer>
แน่นอนมีวิธีการแปลงStream
เป็นList
?
ฉันกำลังดูเอกสารสำหรับIntStream
และฉันเห็นtoArray
วิธีการ แต่ไม่สามารถไปที่List<Integer>
แน่นอนมีวิธีการแปลงStream
เป็นList
?
คำตอบ:
IntStream::boxed
IntStream::boxed
เปลี่ยนเป็นIntStream
a Stream<Integer>
ซึ่งคุณสามารถcollect
เปลี่ยนเป็นList
:
theIntStream.boxed().collect(Collectors.toList())
boxed
วิธีการแปลงint
ค่าดั้งเดิมของIntStream
เข้าไปในกระแสของInteger
วัตถุ คำว่า"มวย"ตั้งชื่อกระบวนการแปลงint
⬌ Integer
ดูออราเคิลกวดวิชา
toList
นอกจากนี้ผมคิดว่ารหัสนี้ได้รับเพียงเล็กน้อยสั้นชัดเจนและสวยถ้าคุณใช้การนำเข้าคงที่ของ static import java.util.stream.Collectors.toList;
นี้จะกระทำโดยการวางต่อไปนี้ในหมู่การนำเข้าแฟ้ม: .collect(toList())
จากนั้นการเรียกเก็บเพียงอ่าน
Collectors
ระดับในการตั้งค่า -> Java -> แก้ไข -> เนื้อหา Assist -> รายการโปรด หลังจากนี้คุณจะต้องพิมพ์toLi
ที่ hit Ctr + Spaceเพื่อให้ IDE เติมtoList
และเพิ่มการนำเข้าคงที่
boxed()
ส่วน
คุณยังสามารถใช้ mapToObj () บนสตรีมซึ่งใช้ IntFunction และส่งคืนสตรีมที่มีค่าเป็นวัตถุซึ่งประกอบด้วยผลลัพธ์ของการใช้ฟังก์ชั่นที่กำหนดให้กับองค์ประกอบของสตรีมนี้
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
มอบหมายให้
คุณสามารถใช้คอลเล็กชันดั้งเดิมที่มีอยู่ในEclipse Collectionsและหลีกเลี่ยงการชกมวย
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
หมายเหตุ: ฉันเป็นผู้บริจาคให้กับ Eclipse Collections
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
ค้นหาตัวอย่างการค้นหากำลังสองของแต่ละองค์ประกอบ int โดยใช้ 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);
คุณสามารถใช้วิธีการเก็บรวบรวม:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
ในความเป็นจริงนี่เป็นสิ่งที่ Java ทำเมื่อคุณเรียกใช้. collect (Collector.toList ()) บนสตรีมวัตถุ:
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);
}
หมายเหตุ: พารามิเตอร์ที่สามจำเป็นเฉพาะเมื่อคุณต้องการรันการรวบรวมแบบขนานเท่านั้น สำหรับการรวบรวมตามลำดับที่ให้เพียงสองรายการแรกจะเพียงพอ