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?

28
demandé sur vikas devde 2013-01-09 13:11:14

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);
 }
46
répondu Andreas_D 2013-01-09 09:27:05

One-liner (java8):

list.removeIf(s -> s.equals("acbd")); // removes all instances, not just the 1st one

(tous les itération implicitement)

14
répondu Andrejs 2017-04-10 09:02:31

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.

10
répondu npinti 2013-01-09 09:18:17

Vous devez vérifier API pour ces questions.

Vous pouvez utiliser supprimer méthodes.

a.remove(1);

OR

a.remove("acbd");
3
répondu Azodious 2013-01-09 09:14:31

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.

1
répondu poussma 2013-01-09 09:13:08

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]
1
répondu AnjuT 2017-06-15 04:56:52

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

0
répondu Renjith 2013-01-09 09:14:09

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();
    }
0
répondu rai.skumar 2013-01-09 09:14:26

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();
        }
    }
0
répondu Arafath 2016-08-12 05:00:51

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]
0
répondu Nitin Vavdiya 2017-03-17 06:43:14