ฉันพยายามแปลง int เป็น List และใช้เส้นทางที่ไม่คุ้นเคยในการใช้ Java 8 Stream และคิดสิ่งนี้ขึ้นมา
Arrays.stream(arr).boxed().collect(Collectors.toList());
ฉันยังคงมีปัญหาในการเข้าใจบรรทัดนี้ส่วนใหญ่
เหตุใด
Collectors.toList()
ในกรณีนี้จึงส่งคืนอินเตอร์เฟสที่ArrayList<Integer>
ใช้งานList
ทำไมไม่LinkedList<Integer>
หรือคลาสทั่วไปอื่น ๆ ที่สอดคล้องกับList
อินเตอร์เฟส? ฉันไม่พบสิ่งใดเกี่ยวกับเรื่องนี้ยกเว้นการกล่าวถึง ArrayList สั้น ๆที่นี่ในส่วน API Notesแผงด้านซ้าย หมายถึงอะไร เห็นได้ชัดว่าเป็นประเภทผลตอบแทนทั่วไป ( ในรหัสของฉันที่นี่) และฉันคิดว่าเป็นอาร์กิวเมนต์ประเภททั่วไปของวิธีการ แต่พวกเขาจะระบุได้อย่างไร ผมมองเข้าไปสะสมอินเตอร์เฟซ doc และไม่สามารถที่จะดูดซึมได้
Stream.collect()
R
ArrayList<Integer>
<R, A>
Collectors.toList()
ในกรณีนี้กลับArrayList<Integer>
"ArrayList
มันอาจจะไม่กลับ List
การดำเนินงานจะไม่ได้กำหนดดังนั้นคุณจึงไม่สามารถพึ่งพาสิ่งที่ดำเนินการก็จะส่งกลับ ตามที่javadocพูดว่า: " ไม่มีการรับประกันประเภท , ความผันแปร, ความต่อเนื่องของอนุกรมหรือความปลอดภัยของเธรดของรายการที่ส่งคืน"
toList()
จะไม่ส่งคืน a ArrayList
หรือList
- กำลังส่งคืนCollector
ซึ่งในที่สุดจะสร้างและส่งคืนList
- ในเอกสารระบุ: "... ไม่มีการรับประกันประเภท , ความผันแปร, ความต่อเนื่องของอนุกรมหรือความปลอดภัยของเธรดที่ส่งคืน; หากต้องการการควบคุมมากกว่ารายการที่ถูกส่งคืนให้ใช้ toCollection (ผู้ผลิต) .... "
R
เป็นประเภททั่วไปของประเภทผลลัพธ์A
ประเภททั่วไปของประเภทการสะสมขั้นกลางของนักสะสม นั่นคือรายละเอียดการนำไปปฏิบัติเกี่ยวกับวิธีการทำงานของตัวสะสมมันแบ่งและพิชิตสำหรับการประมวลผลแบบขนาน