Collection.stream().forEach() และ Collection.forEach() ทั้งคู่ใช้เพื่อวนซ้ำคอลเลกชัน
Collection.forEach() ใช้ตัววนซ้ำของคอลเลกชัน คอลเล็กชันส่วนใหญ่ไม่อนุญาตให้มีการปรับเปลี่ยนโครงสร้างในขณะที่ทำซ้ำ หากองค์ประกอบใด ๆ เพิ่มหรือลบในขณะที่ทำซ้ำพวกเขาจะโยนข้อยกเว้นการแก้ไขพร้อมกันทันที หาก Collection.forEach() กำลังวนซ้ำบนคอลเล็กชันที่ซิงโครไนซ์ พวกเขาจะล็อกเซ็กเมนต์ของคอลเล็กชันและพักไว้ตลอดทุกการโทร
Collection.stream().forEach() ยังใช้สำหรับการวนซ้ำคอลเลกชัน แต่ก่อนอื่นจะแปลงคอลเลกชันเป็นสตรีมแล้ววนซ้ำบนสตรีมของคอลเลกชันดังนั้นจึงไม่มีการกำหนดลำดับการประมวลผล นอกจากนี้ยังส่งข้อยกเว้นการแก้ไขที่เกิดขึ้นพร้อมกัน หากการเปลี่ยนแปลงโครงสร้างเกิดขึ้นขณะทำซ้ำ จะมีการส่งข้อยกเว้นทันที
ซีเนียร์ เลขที่ | คีย์ | Collection.forEach() | Collection.stream().forEach() |
---|---|---|---|
1 | พื้นฐาน | Collection.forEach() ใช้ตัววนซ้ำของคอลเลกชัน | Collection.stream().forEach() ยังใช้สำหรับวนซ้ำคอลเลกชัน แต่ก่อนอื่นแปลงคอลเลกชันเป็นสตรีมแล้ววนซ้ำผ่านสตรีมของคอลเลกชัน |
2 | สั่งซื้อ | มันจะดำเนินการในลำดับการวนซ้ำของ Iterable เสมอ หากมีการระบุไว้ | ไม่ได้กำหนดลำดับ |
3 | ล็อค | หากมีการวนซ้ำในคอลเล็กชันที่ซิงโครไนซ์ มันจะล็อกคอลเล็กชันและค้างไว้ในทุกการโทร | ไม่ล็อคคอลเลกชั่น |
4. | ข้อยกเว้น | มันจะโยนข้อยกเว้นทันทีในกรณีที่มีการปรับเปลี่ยนโครงสร้างใด ๆ เกิดขึ้นในคอลเลกชัน | ข้อยกเว้นจะถูกโยนทิ้งในภายหลัง |
ตัวอย่าง Collection.stream().forEach
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List list= new ArrayList(); list.add("Ram"); list.add("TutorialPoints"); list.stream().forEach(System.out::print); } }
ตัวอย่าง Collection.forEach
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List list= new ArrayList(); list.add("Ram"); list.add("TutorialPoints"); list.forEach(System.out::print); } }