โดยสังเขป:
การสั่งซื้อขึ้นอยู่กับโครงสร้างข้อมูลต้นทางและการดำเนินการสตรีมระดับกลาง สมมติว่าคุณกำลังใช้List
การประมวลผลควรสั่งซื้อ (เนื่องจากfilter
จะไม่เปลี่ยนลำดับที่นี่)
รายละเอียดเพิ่มเติม:
Sequential vs Parallel vs Unordered:
Javadocs
S sequential()
Returns an equivalent stream that is sequential. May return itself, either because the stream was already sequential, or because the underlying stream state was modified to be sequential.
This is an intermediate operation.
S parallel()
Returns an equivalent stream that is parallel. May return itself, either because the stream was already parallel, or because the underlying stream state was modified to be parallel.
This is an intermediate operation.
S unordered()
Returns an equivalent stream that is unordered. May return itself, either because the stream was already unordered, or because the underlying stream state was modified to be unordered.
This is an intermediate operation.
สตรีมสั่งซื้อ:
Javadocs
ลำธารอาจมีหรือไม่มีคำสั่งเผชิญหน้า การสตรีมมีลำดับการเผชิญหน้าหรือไม่นั้นขึ้นอยู่กับแหล่งที่มาและการดำเนินการระดับกลาง แหล่งที่มาของกระแสข้อมูลบางอย่าง (เช่นรายการหรืออาร์เรย์) มีการเรียงลำดับจากภายในขณะที่แหล่งอื่น (เช่น HashSet) ไม่ได้รับการจัดเตรียม การดำเนินการระดับกลางบางอย่างเช่น sort () อาจกำหนดลำดับการพบบนสตรีมที่ไม่เรียงลำดับและอื่น ๆ อาจแสดงการเรียงลำดับสตรีมแบบไม่เรียงลำดับเช่น BaseStream.unordered () นอกจากนี้การทำงานของเทอร์มินัลบางอย่างอาจเพิกเฉยต่อคำสั่งเผชิญหน้าเช่น forEach ()
หากมีการสั่งซื้อกระแสการดำเนินงานส่วนใหญ่จะถูก จำกัด ให้ใช้งานกับองค์ประกอบตามลำดับการเผชิญหน้า หากที่มาของกระแสข้อมูลเป็นรายการที่มี [1, 2, 3] ดังนั้นผลลัพธ์ของการดำเนินการแผนที่ (x -> x * 2) จะต้องเป็น [2, 4, 6] อย่างไรก็ตามหากแหล่งที่มาไม่มีคำสั่งพบการกำหนดแล้วการเปลี่ยนแปลงใด ๆ ของค่า [2, 4, 6] จะเป็นผลที่ถูกต้อง
สำหรับสตรีมแบบต่อเนื่องการมีหรือไม่มีคำสั่งพบจะไม่ส่งผลต่อประสิทธิภาพ หากมีการสั่งซื้อกระแสการดำเนินการของท่อส่งกระแสข้อมูลที่เหมือนกันซ้ำ ๆ บนแหล่งเดียวกันจะให้ผลลัพธ์ที่เหมือนกัน หากไม่ได้รับคำสั่งการดำเนินการซ้ำ ๆ อาจให้ผลลัพธ์ที่แตกต่าง
สำหรับสตรีมแบบขนานการผ่อนคลายข้อ จำกัด ในการสั่งซื้อในบางครั้งอาจทำให้การดำเนินการมีประสิทธิภาพมากขึ้น การดำเนินการรวมบางอย่างเช่นการกรองรายการที่ซ้ำกัน (ชัดเจน ()) หรือการลดการจัดกลุ่ม (Collector.groupingBy ()) สามารถดำเนินการได้อย่างมีประสิทธิภาพมากขึ้นหากการสั่งซื้อองค์ประกอบไม่เกี่ยวข้อง ในทำนองเดียวกันการดำเนินการที่เชื่อมโยงกับภายในเพื่อเผชิญกับการสั่งซื้อเช่น limit () อาจต้องมีการกำหนดบัฟเฟอร์เพื่อให้แน่ใจว่าการสั่งซื้อที่เหมาะสมโดยไม่ทำลายประโยชน์ของการขนาน ในกรณีที่กระแสมีคำสั่งพบ แต่ผู้ใช้ไม่สนใจโดยเฉพาะอย่างยิ่งเกี่ยวกับคำสั่งพบว่าการยกเลิกการสั่งซื้อกระแสกับ unordered () อย่างชัดเจนอาจปรับปรุงประสิทธิภาพการทำงานแบบขนานสำหรับการดำเนินงาน stateful หรือ terminal บางอย่าง อย่างไรก็ตามท่อส่งกระแสส่วนใหญ่เช่นตัวอย่าง "ผลรวมของน้ำหนักของบล็อก" ด้านบน