J'ai ArrayList, à partir duquel je veux supprimer un élément qui a une valeur particulière ...
pour par exemple.
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 sur la méthode .remove () pour supprimer un élément, mais je ne sais pas comment le faire en itérant. Comment puis-je supprimer un élément qui a la valeur "acbd", c'est-à-dire le deuxième élément?
Dans votre cas, il n'est pas nécessaire de parcourir la liste, car vous savez quel objet à supprimer. Vous avez plusieurs options. Tout d'abord, vous pouvez supprimer l'objet par index (donc 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 l’occurrence première de votre chaîne:
a.remove("acbd"); // removes the first String object that is equal to the
// String represented by this literal
Ou, supprimez toutes les chaînes 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 que vous souhaitez supprimer des instances, qui ont une certaine propriété. Pour que vous ne puissiez pas les supprimer en utilisant remove
avec un objet égal à celui que vous souhaitez supprimer.
Dans ce cas, j'utilise généralement une seconde liste pour collecter toutes les instances que je souhaite supprimer et les supprimer en une seconde fois:
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
(fait toutes les itérations 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;
}
}
Ceci étant dit, vous pouvez utiliser les remove (int index) ou remove (Object obj) qui sont fournis par la classe ArrayList . Notez cependant que l'appel de ces méthodes pendant que vous effectuez une itération sur la boucle entraînera une exception ConcurrentModificationException , de sorte que cela ne fonctionnera pas:
for(String str : a)
{
if (str.equals("acbd")
{
a.remove("abcd");
break;
}
}
Mais cela va (puisque vous ne parcourez pas le contenu de la boucle):
a.remove("acbd");
Si vous avez des objets plus complexes, vous devrez redéfinir la méthode égal .
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]
Il suffit d'utiliser myList.remove(myObject)
.
Il utilise la méthode equals 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 jeter un coup d'œil à la bibliothèque de goyaves qui a des dizaines d'utilitaires pour le faire avec des prédicats, etc.
L'extrait permettant de supprimer un élément de toute liste en fonction de la condition d'appariement est le suivant:
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 ci-dessous le code:
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);
}
votre sortie:
[abc, xyz, test, test123]
abc
xyz
test
test123
[abc, xyz, test123]
utilisez la méthode contains () disponible dans list interface pour vérifier si la valeur existe ou non dans list. Si elle contient cet élément, obtenez son index et supprimez-le.
Utilisez un itérateur pour parcourir la liste, puis supprimez l'objet requis.
Iterator itr = a.iterator();
while(itr.hasNext()){
if(itr.next().equals("acbd"))
itr.remove();
}