O método ArrayList removeAll() em Java não remove todos os elementos do ArrayList adequado , como seu nome pode sugerir. Se você precisar desta operação, use o método ArrayList clear() . Ao contrário de clear() , o método removeAll() remove todos os itens de uma determinada lista que estão contidos em outra coleção.
sintaxe e declaração removeAll()
Aqui está a sintaxe do método:boolean removeAll(Collection<?> c)
Onde c é uma coleção que contém elementos a serem removidos desta lista. Este método retorna verdadeiro se esta lista for alterada como resultado da chamada. Também pode lançar exceções: ClassCastException — se a classe de um elemento desta lista for incompatível com a coleção especificada NullPointerException — se a lista contiver um elemento nulo e a coleção especificada não permitir elementos nulos ou se a coleção especificada for nula
exemplo de código removeAll()
Digamos que você tenha uma lista de amigos em sua rede social. Bem, é o normal por enquanto. Além disso, digamos que você seja meticuloso e insira todos os seus malfeitores em uma lista especial de inimigos, independentemente de seus inimigos estarem entre seus amigos da rede social ou não. Você decidiu limpar sua lista de amigos de todos os malfeitores. O método removeAll() definitivamente ajudará com isso: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);
}
}
A saída é:
Minha velha lista de amigos: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] Todos os meus inimigos: [Ben, Scott, Chuck, Olly, Sam] nova lista de amigos sem inimigos: [Alex, Ivy, Victor, Peter, Lenny, Stu, Olivia]
Como você pode ver, o método excluiu seus inimigos Olly e Scott. Você não tinha inimigos Ben, Chuck e Sam em sua lista de amigos. Você provavelmente notou que de acordo com a declaração do método removeAll() você pode excluir de sua lista não apenas valores de outra lista, mas de uma coleção aleatória. Vamos dar um exemplo com HashMap . Nesse caso, você precisa indicar explicitamente que deseja remover os registros que correspondem, por exemplo, a valores (removeAll (collection.values()) ou chaves (removeAll (collection.keySet()) . Vamos imaginar que temos um HashMap com os nomes de todas as garotas entre nossos amigos, e precisamos deixar apenas os garotos na friendList(Não sei por que isso pode ser necessário, mas nunca se sabe). Vamos voltar ao nosso exemplo com a velha lista de amigos, criar um HasMap para meninas e remover da lista de amigos todas as meninas cujos nomes estão escritos nos valores do nosso 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);
}
}
Aqui está a saída:
Minha velha lista de amigos: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] só amigos de meninos Lista: [Alex, Victor, Peter, Lenny, Stu, Scott]
Alguns casos especiais
No início deste artigo eu escrevi que para remover todos os seus valores da lista, você precisa usar o método ArrayList clear() . É, mas é claro que você também pode usar o método removeAll() para isso. Você provavelmente já adivinhou como fazer isso:myList.RemoveAll (myList);
Vamos dar um exemplo. Em um ataque de sociopatia, vamos esvaziar toda a nossa friendList:
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);
}
}
Aqui está a saída:
lista de amigos apenas para meninos: [Alex, Victor, Peter, Lenny, Stu, Scott] minha nova lista de amigos vazia...:[]
Pelo menos vamos tentar remover os elementos null-collection do nosso 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);
}
}
De acordo com a definição do método removeAll(), temos uma exceção na saída:
Minha velha lista de amigos: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia] Exceção no thread "main" java.lang.NullPointerException
Mais leitura: |
---|