ในไลบรารี pre-Java 8 lambda-heavy เช่น Guava เอาต์พุตใช้อินเตอร์เฟส Java Collection Framework ทั่วไปดังนั้นจึงง่ายต่อการส่งไปยัง API ภายนอก / ภายในและยังคงควบคุมการคำนวณแบบสันหลังยาวหากวิธีไลบรารีทำเช่นนั้น (ขี้เกียจfilter()และtransform())
อย่างไรก็ตามใน Java 8 Streams การเรียกรับ a Collection/ Mapis terminal (เช่นกระตือรือร้น) และจะจัดสรรโครงสร้างข้อมูลใหม่เพื่อเก็บผลลัพธ์
สำหรับการคำนวณที่ซับซ้อนที่มีหลายขั้นตอนและรูปแบบกลยุทธ์อยู่ตรงกลางสิ่งนี้ทำให้เกิดการจัดสรรที่ไม่จำเป็นจำนวนมากเนื่องจากผลลัพธ์ระดับกลาง
ดังนั้นผู้คนคิดว่าเป็นวิธีปฏิบัติที่ดีสำหรับ API ภายใน (เช่นกลยุทธ์รูปแบบกลยุทธ์) ในการรับและส่งคืนStreamหรือฉันควรย้อนกลับไปยังคนขี้เกียจ แต่ไม่คล่องตัว (คิดว่าฉันเดา) API ของ Guava
แก้ไข:
ความกังวลหลักของฉันStreamคือมันสามารถบริโภคได้เพียงครั้งเดียวและผ่านบางสิ่งบางอย่างเช่นSupplier<Stream<X>>ดูยุ่งยากมาก มันเกือบจะผลักดันให้คุณเพิ่งผ่านCollectionและกลับมาอีกครั้งstream()(และจ่ายค่าใช้จ่ายในการประเมินความกระตือรือร้นที่จุดนั้น)