Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง Collection.stream().forEach() และ Collection.forEach() ใน Java


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);
   }
}