ฉันพยายามแปลง 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()RArrayList<Integer><R, A>
Collectors.toList()ในกรณีนี้กลับArrayList<Integer>"ArrayListมันอาจจะไม่กลับ Listการดำเนินงานจะไม่ได้กำหนดดังนั้นคุณจึงไม่สามารถพึ่งพาสิ่งที่ดำเนินการก็จะส่งกลับ ตามที่javadocพูดว่า: " ไม่มีการรับประกันประเภท , ความผันแปร, ความต่อเนื่องของอนุกรมหรือความปลอดภัยของเธรดของรายการที่ส่งคืน"
toList()จะไม่ส่งคืน a ArrayListหรือList- กำลังส่งคืนCollectorซึ่งในที่สุดจะสร้างและส่งคืนList- ในเอกสารระบุ: "... ไม่มีการรับประกันประเภท , ความผันแปร, ความต่อเนื่องของอนุกรมหรือความปลอดภัยของเธรดที่ส่งคืน; หากต้องการการควบคุมมากกว่ารายการที่ถูกส่งคืนให้ใช้ toCollection (ผู้ผลิต) .... "
Rเป็นประเภททั่วไปของประเภทผลลัพธ์Aประเภททั่วไปของประเภทการสะสมขั้นกลางของนักสะสม นั่นคือรายละเอียดการนำไปปฏิบัติเกี่ยวกับวิธีการทำงานของตัวสะสมมันแบ่งและพิชิตสำหรับการประมวลผลแบบขนาน