ฉันรู้สึกว่าฉันจำเป็นต้องเพิ่มความคิดเห็นของฉันเล็กน้อย ...
เกี่ยวกับกระบวนทัศน์ \ style
นั่นอาจเป็นสิ่งที่น่าสังเกตมากที่สุด FP กลายเป็นที่นิยมเนื่องจากสิ่งที่คุณสามารถหลีกเลี่ยงผลข้างเคียง ฉันจะไม่เจาะลึกลงไปถึงข้อดีที่คุณจะได้รับจากสิ่งนี้เนื่องจากสิ่งนี้ไม่เกี่ยวข้องกับคำถาม
อย่างไรก็ตามฉันจะบอกว่าการทำซ้ำโดยใช้ Iterable.forEach ได้รับแรงบันดาลใจจาก FP และค่อนข้างเป็นผลมาจากการนำ FP มาสู่ Java (แดกดันฉันจะบอกว่าไม่มีประโยชน์มากสำหรับ forEach ใน FP บริสุทธิ์เนื่องจากไม่ทำอะไรเลยยกเว้นการแนะนำ ผลข้างเคียง).
ในที่สุดฉันจะบอกว่ามันค่อนข้างเป็นเรื่องของรสนิยม \ style \ กระบวนทัศน์ที่คุณกำลังเขียน
เกี่ยวกับการขนาน
จากมุมมองประสิทธิภาพไม่มีข้อได้เปรียบที่โดดเด่นจากการใช้ Iterable.forEach มากกว่า foreach (... )
เอกสารอ้างอิงอย่างเป็นทางการของIterable.forEach :
ดำเนินการตามที่กำหนดในเนื้อหาของ Iterable ในองค์ประกอบลำดับที่เกิดขึ้นเมื่อวนซ้ำจนกว่าองค์ประกอบทั้งหมดจะได้รับการประมวลผลหรือการกระทำที่เกิดข้อยกเว้น
... เช่นเอกสารค่อนข้างชัดเจนว่าจะไม่มีการขนานโดยนัย การเพิ่มหนึ่งรายการเป็นการละเมิด LSP
ขณะนี้มี "คอลเลกชันคู่ขนาน" ที่สัญญาไว้ใน Java 8 แต่จะทำงานกับสิ่งที่คุณต้องการให้ฉันชัดเจนยิ่งขึ้นและใช้ความระมัดระวังเป็นพิเศษในการใช้ (ดูตัวอย่างคำตอบของ mschenk74)
BTW: ในกรณีนี้Stream.forEachจะถูกนำมาใช้และไม่รับประกันว่างานจริงจะดำเนินการในแบบคู่ขนาน (ขึ้นอยู่กับการรวบรวมพื้นฐาน)
อัปเดต:อาจไม่ชัดเจนและยืดออกเล็กน้อย แต่มีอีกแง่มุมหนึ่งของสไตล์และมุมมองการอ่าน
ครั้งแรกของทั้งหมด - forloops เก่าธรรมดาล้วนและเก่า ทุกคนรู้จักพวกเขาอยู่แล้ว
ข้อสองและสำคัญกว่า - คุณอาจต้องการใช้ Iterable.forEach กับ lambdas แบบซับไลน์เท่านั้น หาก "ร่างกาย" หนักขึ้น - พวกเขามักจะอ่านไม่ออก คุณมี 2 ตัวเลือกจากที่นี่ - ใช้คลาสภายใน (yuck) หรือใช้ forloop เก่าแบบธรรมดา คนมักจะรำคาญเมื่อเห็นสิ่งเดียวกัน (iteratins มากกว่าคอลเลกชัน) การทำ vays / style ต่าง ๆ ใน codebase เดียวกันและดูเหมือนว่าจะเป็นกรณีนี้
อีกครั้งนี่อาจจะใช่หรือไม่ใช่ปัญหา ขึ้นอยู่กับคนที่ทำงานกับรหัส