วิธีการ ArrayList removeAll()ใน Java ไม่ได้ลบองค์ประกอบทั้งหมดออกจากArrayList ที่เหมาะสม ตามชื่อของมัน หากคุณต้องการการดำเนินการนี้ ให้ใช้ เมธอดArrayList clear() ซึ่งแตกต่างจากclear()เมธอดremoveAll()จะลบรายการทั้งหมดออกจากรายการที่กำหนดซึ่งมีอยู่ในคอลเล็กชันอื่น

removeAll() ไวยากรณ์และการประกาศ

นี่คือไวยากรณ์ของวิธีการ:

boolean removeAll(Collection<?> c)
โดยที่cคือคอลเลกชันที่มีองค์ประกอบที่จะลบออกจากรายการนี้ เมธอดนี้คืนค่าจริงหากรายการนี้เปลี่ยนแปลงเนื่องจากการเรียก นอกจากนี้ยังสามารถส่งข้อยกเว้น: ClassCastException — หากคลาสขององค์ประกอบของรายการนี้เข้ากันไม่ได้กับคอลเล็กชัน NullPointerExceptionที่ระบุ — หากรายการมีองค์ประกอบที่เป็นโมฆะและคอลเล็กชันที่ระบุไม่อนุญาตให้มีองค์ประกอบที่เป็นโมฆะ หรือหากคอลเล็กชันที่ระบุเป็นโมฆะ

ตัวอย่างโค้ด removeAll()

สมมติว่าคุณมีรายชื่อเพื่อนบนโซเชียลเน็ตเวิร์ก เป็นเรื่องปกติสำหรับตอนนี้ นอกจากนี้ สมมติว่าคุณเป็นคนพิถีพิถัน และใส่รายชื่อผู้ไม่หวังดีทั้งหมดของคุณลงในรายชื่อศัตรูพิเศษ โดยไม่คำนึงว่าศัตรูของคุณจะอยู่ในกลุ่มเพื่อนในโซเชียลเน็ตเวิร์กของคุณหรือไม่ คุณได้ตัดสินใจล้างรายชื่อเพื่อนของผู้ไม่หวังดีทั้งหมด วิธี removeAll ()จะช่วยได้อย่างแน่นอน:

import java.util.ArrayList;
import java.util.List;

public class RemoveAll2Example {
  
       public static void main(String[] args) {

           
           List<String> friendList = new ArrayList<String>();

           // use add() method to add friends into your friend list
           friendList.add("Alex");
           friendList.add("Ivy");
           friendList.add("Victor");
           friendList.add("Peter");
           friendList.add("Lenny");
           friendList.add("Olly");
           friendList.add("Stu");
           friendList.add("Scott");
           friendList.add("Olivia");

           System.out.println("My old friend list: "+ friendList);

           //create and add elements to foe list 
           List<String> foeList = new ArrayList<String>();

           foeList.add("Ben");
           foeList.add("Scott");
           foeList.add("Chuck");
           foeList.add("Olly");
           foeList.add("Sam");
           System.out.println("All my enemies: "+ foeList);

           //remove all foeList elements from friendList list if they exist
           friendList.removeAll(foeList);
           System.out.println("new friend List without foes: "+ friendList);
       }
   }
ผลลัพธ์คือ:
รายชื่อเพื่อนเก่าของฉัน: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] ศัตรูทั้งหมดของฉัน: [Ben, Scott, Chuck, Olly, Sam] รายชื่อเพื่อนใหม่ที่ไม่มีศัตรู: [Alex, Ivy, วิคเตอร์, ปีเตอร์, เลนนี่, สตู, โอลิเวีย]
อย่างที่คุณเห็น วิธีนี้ได้ลบศัตรูของคุณ Olly และ Scott คุณไม่มีศัตรูอย่างเบ็น ชัค และแซมในรายชื่อเพื่อนของคุณ คุณอาจสังเกตเห็นว่าตามการประกาศเมธอดremoveAll() คุณสามารถลบออกจากรายการของคุณ ไม่เพียงแต่ค่าจากรายการอื่น แต่จากการรวบรวมแบบสุ่ม มาดูตัวอย่างกับHashMap ในกรณีนี้ คุณต้องระบุอย่างชัดเจนว่าคุณต้องการลบเรคคอร์ดที่ตรงกัน เช่น มีค่า(removeAll (collection.values())หรือคีย์(removeAll (collection.keySet())ลองจินตนาการว่าเรามีHashMapที่มีชื่อผู้หญิงทุกคนในหมู่เพื่อนของเรา และเราต้องเหลือแต่ผู้ชายไว้ในรายการเพื่อน(ฉันไม่รู้ว่าทำไมจึงจำเป็น แต่คุณไม่มีทางรู้) กลับไปที่ตัวอย่างของเราด้วยรายชื่อเพื่อนเก่า สร้างHasMap ของสาวๆ และนำสาวๆ ทุกคนที่มีชื่อเขียนด้วยค่าของHashMap ออกจากรายชื่อ เพื่อน

import java.util.*;

public class RemoveAll2Example {
  
       public static void main(String[] args) {

          // create an empty array list and full it up using Java 9 Factory Methods  in one line
List<String> friendList= new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));

           System.out.println("My old friend list: "+ friendList);

           // Creating hashMap with girls keys and names also using using Java 9 Factory Methods   
           Map<Integer, String> girls = new HashMap<>(Map.of(1, "Olly", 2, "Olivia", 3, "Loe", 4, "Ivy"));
           friendList.removeAll(girls.values());
           System.out.println("boys only friendList: " + friendList);
       }
   }
นี่คือผลลัพธ์:
รายชื่อเพื่อนเก่าของฉัน: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] รายชื่อเพื่อนชายเท่านั้น: [Alex, Victor, Peter, Lenny, Stu, Scott]

บางกรณีพิเศษ

ในตอนต้นของบทความนี้ ฉันเขียนว่าในการลบค่าทั้งหมดออกจากรายการ คุณต้องใช้เมธอด ArrayList clear () มันคือ แต่แน่นอนว่าคุณสามารถใช้ เมธอด removeAll()สำหรับสิ่งนี้ ได้เช่นกัน คุณอาจเดาได้ว่าจะทำอย่างไร:

myList.RemoveAll (myList);
ลองยกตัวอย่าง เพื่อต่อต้านสังคมวิทยา มาล้างรายชื่อเพื่อนทั้งหมดของเรากันเถอะ:

 import java.util.*;

public class RemoveAll2Example {
  
       public static void main(String[] args) {

           // create an empty array list and full it up using  Java 9 Factory Methods  in one line
           List<String> friendList= new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));
           System.out.println("My old friend list: "+ friendList);

           friendList.removeAll(friendList);
           System.out.println("my new empty friendlist...:" + friendList);
       }
   }
นี่คือผลลัพธ์:
รายชื่อเพื่อนชายเท่านั้น: [Alex, Victor, Peter, Lenny, Stu, Scott] รายชื่อเพื่อนใหม่ที่ว่างเปล่าของฉัน...:[]
อย่างน้อยลองลบองค์ประกอบ null-collection ออกจากArrayList :

import java.util.*;

public class RemoveAll2Example {
  
       public static void main(String[] args) {

           List<String> friendList = new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));
           System.out.println("My old friend list: "+ friendList);

           // we are happy not to have foes 
           List<String> foeList = null;
          
           //trying to remove all foeList elements from friendList list 
            friendList.removeAll(foeList);
            System.out.println("my new friendlist:" + friendList);
       }
   }
ตาม คำจำกัดความของเมธอด removeAll()เรามีข้อยกเว้นในเอาต์พุต:
รายชื่อเพื่อนเก่าของฉัน: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] ข้อยกเว้นในเธรด "main" java.lang.NullPointerException