Java IntStream iterate vs สร้างเมื่อจะใช้อะไร


19

มันดูเหมือนเป็นเพียงรุ่นน้ำหนักเบาสำหรับการสั่งซื้อIntStream.iterate IntStream.generateจริงป้ะ? ถ้าไม่ความแตกต่างหลักคืออะไร

คำตอบ:


21

สังเกตความแตกต่างของลายเซ็น:

  • generateใช้เวลาIntSupplierซึ่งหมายความว่าคุณควรจะสร้าง ints โดยไม่ได้รับอะไรเลย ตัวอย่างประเพณีรวมถึงการสร้างกระแสคงที่ของจำนวนเต็มเดียวกันสร้างกระแสจำนวนเต็มแบบสุ่ม สังเกตว่าแต่ละองค์ประกอบในกระแสไม่ได้ขึ้นอยู่กับองค์ประกอบก่อนหน้า

  • iterateใช้เวลาseedและIntUnaryOperatorซึ่งหมายความว่าคุณควรจะสร้างแต่ละองค์ประกอบขึ้นอยู่กับองค์ประกอบที่ก่อนหน้านี้ สิ่งนี้มีประโยชน์สำหรับการสร้างลำดับที่กำหนด inductively ตัวอย่างเช่น ในกรณีนี้แต่ละองค์ประกอบควรจะขึ้นอยู่กับก่อนหน้านี้หนึ่ง


ดังนั้นควรใช้กรณีที่มีการวนซ้ำ - เมื่อต้องการประหยัดสถานะ - นี่คือความแตกต่างหลัก สร้างความจำเป็นในการจัดเก็บสถานะที่อื่น และ Iterate ได้รับคำสั่งในขณะที่ generate ไม่มีการเรียงลำดับซึ่งสามารถทำงานได้สำหรับการ parralelism
JJ Beam

8
  1. IntStream.iterateส่งคืนคำสั่งซื้อIntStreamในทางIntStream.generateกลับกันส่งคืนที่ไม่ได้เรียงลำดับIntStreamซึ่งสามารถช่วยในการเร่งความเร็วของการสตรีมไปป์ไลน์แบบขนาน

  2. IntStream.generate เป็นที่ต้องการในการสร้างค่าแบบสุ่มหรือค่าคงที่ตามที่ระบุไว้ใน Javadoc ฉันจะเดาได้มากที่สุดสำหรับลักษณะของกระแสกลับ


5

นอกเหนือจากการสั่งซื้อแล้วการใช้งานก็แตกต่างกันเล็กน้อย ลองดูที่ลายเซ็นวิธีการ:

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

ซ้ำได้กำหนดค่าเริ่มต้นเป็นพารามิเตอร์และตัวดำเนินการ unary อย่างชัดเจนซึ่งใช้เพื่อสร้างค่าถัดไปจากก่อนหน้า ที่นี่ผู้ประกอบการสามารถเปลี่ยนรูปได้ง่ายโดยไม่ต้องมีสถานะภายในและสามารถนำกลับมาใช้ในหลาย ๆ สถานที่ในแบบคู่ขนานโดยไม่มีปัญหาใด ๆ

สร้างผู้จัดจำหน่ายใช้ ตัวเลขเหล่านั้นสามารถให้ตัวเลขคงที่หรือสุ่มหรือจำเป็นต้องมีสถานะภายในเพื่อให้อนุกรมเช่น (1, 2, 3, ... )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.