เมื่อฉันเรียกว่าStream.sort(..)
มีอาร์เรย์ขององค์ประกอบใหม่ที่สร้างขึ้นและสตรีม iterates มากกว่าอาร์เรย์ที่เรียงใหม่ที่สร้างขึ้น?
กล่าวอีกนัยหนึ่งว่า Java 8 Stream ทำsort
อะไรได้บ้าง?
เมื่อฉันเรียกว่าStream.sort(..)
มีอาร์เรย์ขององค์ประกอบใหม่ที่สร้างขึ้นและสตรีม iterates มากกว่าอาร์เรย์ที่เรียงใหม่ที่สร้างขึ้น?
กล่าวอีกนัยหนึ่งว่า Java 8 Stream ทำsort
อะไรได้บ้าง?
คำตอบ:
คุณสามารถใช้grepcode.comเพื่อค้นหารหัสห้องสมุดมาตรฐาน Java (และห้องสมุดอื่น ๆ ) น่าเสียดายที่โค้ดการสร้างสตรีมค่อนข้างเป็นนามธรรม จุดเริ่มต้นที่ดีคือjava.util.stream.SortedOps
คลาสภายในซึ่งแปลงสตรีมเป็นสตรีมที่เรียงลำดับ
การดำเนินงานในปัจจุบัน (ใช้สำหรับการสตรีมของภาชนะบรรจุมาตรฐานห้องสมุด) ทำให้ไม่มี-op ถ้ากระแสเรียงแล้วใช้อาร์เรย์ถ้าขนาดของกระแสเป็นที่รู้จักกัน ( SizedRefSortingSink
) หรือสะสมองค์ประกอบทั้งหมดใน ArrayList ถ้าขนาดคือ ไม่ทราบ ( RefSortingSink
)
แน่นอนว่ารายละเอียดการใช้งานดังกล่าวอาจเปลี่ยนแปลงได้เมื่อมีการวางจำหน่าย แต่ข้อควรพิจารณาพื้นฐานเป็นสากล: การเรียงสตรีมนั้นจำเป็นต้องมีการดำเนินการที่กระตือรือร้น / การบล็อกและการเรียงลำดับสตรีมไม่สิ้นสุดนั้นไม่มีความหมาย ซึ่งหมายความว่าการจัดเรียงสตรีมจะไม่มีประโยชน์หากคุณใช้สตรีมเพราะมันอาจจะขี้เกียจ แต่คุณยังคงได้รับไวยากรณ์ของสตรีมที่สะดวก
ลำธารอื่น ๆ จะต้องจัดให้มีการดำเนินการของตัวเองStream.sorted()
ซึ่งอาจจะคล้ายกัน