Comment supprimer element from ArrayList en vérifiant sa valeur?
j'ai ArrayList, à partir duquel je veux supprimer un élément qui a une valeur particulière...
pour les eg.
ArrayList<String> a=new ArrayList<String>();
a.add("abcd");
a.add("acbd");
a.add("dbca");
je sais que nous pouvons itérer sur arraylist, et .remove () méthode pour supprimer l'élément mais je ne sais pas comment le faire pendant l'itération. Comment puis-je supprimer un élément qui a une valeur "acbd", c'est-à-dire le second élément?
10 réponses
dans votre cas, il n'est pas nécessaire d'itérer dans la liste, car vous savez quel objet supprimer. Vous avez plusieurs options. D'abord, vous pouvez retirer l'objet à l'index (si si vous savez, que l'objet est le deuxième élément de la liste):
a.remove(1); // indexes are zero-based
Ensuite, vous pouvez supprimer le premier occurence de votre chaîne de caractères:
a.remove("acbd"); // removes the first String object that is equal to the
// String represented by this literal
Ou, retirer toutes les cordes avec une certaine valeur:
while(a.remove("acbd")) {}
C'est un peu plus compliqué, si vous avez des objets plus complexes dans votre collection et veulent supprimer les instances, qui ont une certaine propriété. Pour que vous ne puissiez pas les enlever en utilisant remove
avec un objet qui est égal à celui que vous souhaitez supprimer.
dans ce cas, j'utilise habituellement une deuxième liste pour collecter toutes les instances que je veux supprimer et les supprimer dans un second passage:
List<MyBean> deleteCandidates = new ArrayList<>();
List<MyBean> myBeans = getThemFromSomewhere();
// Pass 1 - collect delete candidates
for (MyBean myBean : myBeans) {
if (shallBeDeleted(myBean)) {
deleteCandidates.add(myBean);
}
}
// Pass 2 - delete
for (MyBean deleteCandidate : deleteCandidates) {
myBeans.remove(deleteCandidate);
}
One-liner (java8):
list.removeIf(s -> s.equals("acbd")); // removes all instances, not just the 1st one
(tous les itération implicitement)
Vous devez utiliser un Iterator comme ceci:
Iterator<String> iterator = a.iterator();
while(iterator.hasNext())
{
String value = iterator.next();
if ("abcd".equals(value))
{
iterator.remove();
break;
}
}
cela étant dit, vous pouvez utiliser le remove (int index) ou remove (Object obj) qui sont fournis par l' ArrayList classe. Notez cependant que l'appel de ces méthodes pendant que vous itérez sur la boucle, va causer un ConcurrentModificationException, donc cela ne fonctionne pas:
for(String str : a)
{
if (str.equals("acbd")
{
a.remove("abcd");
break;
}
}
mais cela (puisque vous n'êtes pas itératif sur le contenu de la boucle):
a.remove("acbd");
Si vous avez des objets plus complexes, vous devrez remplacer le égale méthode.
il suffit d'utiliser myList.remove(myObject)
.
il utilise la méthode des égaux de la classe. Voir http://docs.oracle.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object)
BTW, si vous avez des choses plus complexes à faire, vous devriez consulter la bibliothèque guava qui a une douzaine d'utilités pour faire ça avec des prédicats et ainsi de suite.
Cela vous donnera la sortie,
ArrayList<String> l= new ArrayList<String>();
String[] str={"16","b","c","d","e","16","f","g","16","b"};
ArrayList<String> tempList= new ArrayList<String>();
for(String s:str){
l.add(s);
}
ArrayList<String> duplicates= new ArrayList<String>();
for (String dupWord : l) {
if (!tempList.contains(dupWord)) {
tempList.add(dupWord);
}else{
duplicates.add(dupWord);
}
}
for(String check : duplicates){
if(tempList.contains(check)){
tempList.remove(check);
}
}
System.out.println(tempList);
sortie
[c, d, e, f, g]
utiliser la méthode contains () qui est disponible dans l'interface list pour vérifier que la valeur existe dans list ou non.Si elle contient cet élément, son index et de le supprimer
Utilisez un itérateur pour boucler la liste et ensuite supprimer l'objet requis.
Iterator itr = a.iterator();
while(itr.hasNext()){
if(itr.next().equals("acbd"))
itr.remove();
}
extrait pour supprimer un élément de n'importe quel tableau basé sur la condition correspondante est comme suit:
List<String> nameList = new ArrayList<>();
nameList.add("Arafath");
nameList.add("Anjani");
nameList.add("Rakesh");
Iterator<String> myItr = nameList.iterator();
while (myItr.hasNext()) {
String name = myItr.next();
System.out.println("Next name is: " + name);
if (name.equalsIgnoreCase("rakesh")) {
myItr.remove();
}
}
Essayez de code ci-dessous :
public static void main(String[] args) throws Exception{
List<String> l = new ArrayList<String>();
l.add("abc");
l.add("xyz");
l.add("test");
l.add("test123");
System.out.println(l);
List<String> dl = new ArrayList<String>();
for (int i = 0; i < l.size(); i++) {
String a = l.get(i);
System.out.println(a);
if(a.equals("test")){
dl.add(a);
}
}
l.removeAll(dl);
System.out.println(l);
}
sortie :
[abc, xyz, test, test123]
abc
xyz
test
test123
[abc, xyz, test123]