Comment puis-je supprimer un objet spécifique de ArrayList? Supposons que j'ai une classe comme ci-dessous:
import Java.util.ArrayList;
public class ArrayTest {
int i;
public static void main(String args[]){
ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
ArrayTest obj;
obj=new ArrayTest(1);
test.add(obj);
obj=new ArrayTest(2);
test.add(obj);
obj=new ArrayTest(3);
test.add(obj);
}
public ArrayTest(int i){
this.i=i;
}
}
Comment puis-je supprimer un objet avec new ArrayTest(1)
de mon ArrayList<ArrayList>
ArrayList
supprime les objets basés sur la méthode equals(Object obj)
. Donc, vous devez implémenter correctement cette méthode. Quelque chose comme:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof ArrayTest)) return false;
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
En général, un objet peut être supprimé de deux manières d'un ArrayList
(ou généralement de List
), par index ( remove(int)
) et par objet ( remove(Object)
).
Dans ce scénario particulier: Ajoutez une méthode equals(Object)
à votre classe ArrayTest
. Cela permettra à ArrayList.remove(Object)
d’identifier le bon objet.
Si vous utilisez Java 8:
test.removeIf(t -> t.i == 1);
Java 8 a une méthode removeIf
dans l'interface de collection. Pour ArrayList, son implémentation est avancée (ordre de n).
Pour supprimer un objet particulier de arrayList, il existe deux manières. Appelez la fonction arrayList.
arrayList.remove(object);
Cela supprimera votre objet, mais dans la plupart des cas, lorsque arrayList contient les éléments de UserDefined DataTypes, cette méthode ne vous donne pas le résultat correct. Cela fonctionne bien uniquement pour les primitives DataTypes. Parce que l'utilisateur veut supprimer l'élément sur la base de la valeur du champ d'objet et qui ne peut pas être comparé automatiquement par la fonction remove.
arrayList.remove(index);
utiliser ce code
test.remove(test.indexOf(obj));
test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList.
AValchev a raison ... Une solution plus rapide consisterait à analyser tous les éléments et à les comparer selon une propriété unique.
String property = "property to delete";
for(int j = 0; j < i.size(); j++)
{
Student obj = i.get(j);
if(obj.getProperty().equals(property)){
//found, delete.
i.remove(j);
break;
}
}
C'est une solution rapide. Vous feriez mieux d'implémenter la comparaison d'objets pour des projets plus importants.
Vous pouvez utiliser Collections.binarySearch pour rechercher l'élément, puis appelez remove sur l'index renvoyé.
Consultez la documentation de Collections.binarySearch ici: http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/Collections.html#binarySearch%28Java.util.List, % 20Java.lang.Object% 29
Cela nécessiterait cependant que l’implémentation de .equals soit appliquée à l’objet ArrayTest. Vous devez également appeler Collections.sort pour trier la liste. Enfin, ArrayTest devrait implémenter l'interface Comparable pour que binarySearch s'exécute correctement.
C'est la "bonne" façon de le faire en Java. Si vous cherchez simplement à résoudre le problème de manière rapide et sale, vous pouvez simplement parcourir les éléments et supprimer celui avec l'attribut que vous recherchez.
List<Object> list = new ArrayList();
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
Object obj= iterator.next();
if (obj.getId().equals("1")) {
// Remove the current element from the iterator and the list.
iterator.remove();
}
}
Voici un exemple complet. nous devons utiliser méthode remove ()} _ de la méthode
import Java.util.ArrayList;
import Java.util.Iterator;
public class ArrayTest {
int i;
public static void main(String args[]) {
ArrayList<ArrayTest> test = new ArrayList<ArrayTest>();
ArrayTest obj;
obj = new ArrayTest(1);
test.add(obj);
obj = new ArrayTest(2);
test.add(obj);
obj = new ArrayTest(3);
test.add(obj);
System.out.println("Before removing size is " + test.size() + " And Element are : " + test);
Iterator<ArrayTest> itr = test.iterator();
while (itr.hasNext()) {
ArrayTest number = itr.next();
if (number.i == 1) {
itr.remove();
}
}
System.out.println("After removing size is " + test.size() + " And Element are :" + test);
}
public ArrayTest(int i) {
this.i = i;
}
@Override
public String toString() {
return "ArrayTest [i=" + i + "]";
}
}
Si vous souhaitez supprimer plusieurs objets correspondant à la propriété, essayez ceci.
J'ai utilisé le code suivant pour supprimer un élément du tableau d'objets, cela m'a aidé.
En général, un objet peut être supprimé de deux manières d'une ArrayList
(ou d'une liste), par index
(remove (int)) et par object
(remove (Object)).
un certain temps pour vous arrayList.remove(index)
ouarrayList.remove(obj.get(index))
en utilisant ces lignes peut ne pas fonctionner, essayez d'utiliser le code suivant.
for (Iterator<DetailInbox> iter = detailInboxArray.iterator(); iter.hasNext(); ) {
DetailInbox element = iter.next();
if (element.isSelected()) {
iter.remove();
}
}
Cela m'a aidé:
card temperaryCardFour = theDeck.get(theDeck.size() - 1);
theDeck.remove(temperaryCardFour);
au lieu de
theDeck.remove(numberNeededRemoved);
J'ai eu une conformation de suppression sur le premier extrait de code et une conformation de suppression sur le second.
Essayez de changer votre code avec le premier extrait, je pense que c'est votre problème.
Nathan Nelson
ArrayTest obj=new ArrayTest(1);
test.add(obj);
ArrayTest obj1=new ArrayTest(2);
test.add(obj1);
ArrayTest obj2=new ArrayTest(3);
test.add(obj2);
test.remove(object of ArrayTest);
vous pouvez spécifier comment vous contrôlez chaque objet.
J'ai essayé cela et ça marche pour moi:
ArrayList<cartItem> cartItems= new ArrayList<>();
//filling the cartItems
cartItem ci=new cartItem(itemcode,itemQuantity);//the one I want to remove
Iterator<cartItem> itr =cartItems.iterator();
while (itr.hasNext()){
cartItem ci_itr=itr.next();
if (ci_itr.getClass() == ci.getClass()){
itr.remove();
return;
}
}