มันดูเหมือนเป็นเพียงรุ่นน้ำหนักเบาสำหรับการสั่งซื้อIntStream.iterate
IntStream.generate
จริงป้ะ? ถ้าไม่ความแตกต่างหลักคืออะไร
มันดูเหมือนเป็นเพียงรุ่นน้ำหนักเบาสำหรับการสั่งซื้อIntStream.iterate
IntStream.generate
จริงป้ะ? ถ้าไม่ความแตกต่างหลักคืออะไร
คำตอบ:
สังเกตความแตกต่างของลายเซ็น:
generate
ใช้เวลาIntSupplier
ซึ่งหมายความว่าคุณควรจะสร้าง ints โดยไม่ได้รับอะไรเลย ตัวอย่างประเพณีรวมถึงการสร้างกระแสคงที่ของจำนวนเต็มเดียวกันสร้างกระแสจำนวนเต็มแบบสุ่ม สังเกตว่าแต่ละองค์ประกอบในกระแสไม่ได้ขึ้นอยู่กับองค์ประกอบก่อนหน้า
iterate
ใช้เวลาseed
และIntUnaryOperator
ซึ่งหมายความว่าคุณควรจะสร้างแต่ละองค์ประกอบขึ้นอยู่กับองค์ประกอบที่ก่อนหน้านี้ สิ่งนี้มีประโยชน์สำหรับการสร้างลำดับที่กำหนด inductively ตัวอย่างเช่น ในกรณีนี้แต่ละองค์ประกอบควรจะขึ้นอยู่กับก่อนหน้านี้หนึ่ง
IntStream.iterate
ส่งคืนคำสั่งซื้อIntStream
ในทางIntStream.generate
กลับกันส่งคืนที่ไม่ได้เรียงลำดับIntStream
ซึ่งสามารถช่วยในการเร่งความเร็วของการสตรีมไปป์ไลน์แบบขนาน
IntStream.generate
เป็นที่ต้องการในการสร้างค่าแบบสุ่มหรือค่าคงที่ตามที่ระบุไว้ใน Javadoc ฉันจะเดาได้มากที่สุดสำหรับลักษณะของกระแสกลับ
นอกเหนือจากการสั่งซื้อแล้วการใช้งานก็แตกต่างกันเล็กน้อย ลองดูที่ลายเซ็นวิธีการ:
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
ซ้ำได้กำหนดค่าเริ่มต้นเป็นพารามิเตอร์และตัวดำเนินการ unary อย่างชัดเจนซึ่งใช้เพื่อสร้างค่าถัดไปจากก่อนหน้า ที่นี่ผู้ประกอบการสามารถเปลี่ยนรูปได้ง่ายโดยไม่ต้องมีสถานะภายในและสามารถนำกลับมาใช้ในหลาย ๆ สถานที่ในแบบคู่ขนานโดยไม่มีปัญหาใด ๆ
สร้างผู้จัดจำหน่ายใช้ ตัวเลขเหล่านั้นสามารถให้ตัวเลขคงที่หรือสุ่มหรือจำเป็นต้องมีสถานะภายในเพื่อให้อนุกรมเช่น (1, 2, 3, ... )