0
votes

Supprimer un article de Foreach Boop qui est dans d'autres pour acheter et utiliser la même liste

Je dois supprimer l'objet de la liste qui se trouve dans la liste qui se trouve dans une autre partie de ne pas vérifier les objets avec le même nom (mais différentes valeurs de cet objet).

Iterator<Foo> iterator = fooList.iterator();

while (iterator.hasNext()) {
      Foo foo = iterator.next();
      // some code
      while (iterator.hasNext()){
        Foo foo2 = iterator.next();
        if (foo2.getName() == foo.getName()) {
          // some code that stores and manipulates values from foo2
          iterator.remove();
        }
      }
      //some code that using values from many foos with the same name
    }


5 commentaires

Faire une copie. Vous ne pouvez pas supprimer un élément d'une liste que vous êtes itération sans problèmes


Le premier code ne fonctionnera certainement pas car il lancera un ConcurrentModificationExtion . Le deuxième code pourrait probablement être effectué pour fonctionner si vous utilisez des itérateurs distincts. Notez également que vous ne devriez pas utiliser == ici. Mais pour être honnête, ce n'est pas tout à fait clair pour moi ce que vous voulez réaliser. Envisagez d'ajouter une explication et un exemple.


Si vous fournissez une image plus grande du problème, vous pouvez obtenir une meilleure aide. Qu'essayez-vous vraiment d'atteindre ici?


Pourquoi êtes-vous itérant la même liste deux fois? Avec un imbriqué dans l'autre? Ne peut penser à aucune raison pour laquelle cela aurait un sens


J'ai besoin de supprimer de la liste des choses qui ont les mêmes noms avant la première boucle ira au premier double. Mais aussi je dois faire des opérations sur d'autres valeurs stockées dans ces objets


3 Réponses :


0
votes

Premier, @override Equals () Code> dans la classe FOO code> Pour décider des attributs qui font deux objets égaux et une des implémentations simultanées d'une liste comme CopyOnwriDraRayList code> pour vous permettre de modifier tout en boucle sur la liste

before remove
[1, one, 2, two, 3, three, 4, four]
after remove
[2, two, 3, three, 4, four


1 commentaires

Pour plus de détails sur les collections concurrentes: docs.oracle.com/javase/ Tutoriel / Essential / Concurrence / ...



0
votes

Si vous avez besoin de supprimer des doublons du du foast par une propriété spécifique, vous pouvez essayer cette approche: xxx


0 commentaires

0
votes

Utilisez Liste :: removeall

Le faire comme suit: xxx

Assurez-vous d'utiliser S1.Equals (S2) à Comparez S1 avec S2 ; Plutôt que d'utiliser s1 == S2 (comment vous avez fait).


2 commentaires

Je dois supprimer des objets de la liste avant que la plus grande boucle ne va à la duplication


Si cela ne fonctionne pas, je dois examiner la liste que vous traitez. Modifiez votre question et postez la même chose.