2017-03-18 1 views
-1

Supposons qu'il y ait quelques classes toutes étendez une classe abstraite abc: -Vérifiez si une liste d'objets contiennent un objet spécifié java

public class mno extends abc { ... } 
public class pqr extends abc { ... } 
public class xyz extends abc { ... } 

il y a une liste d'objets qui contient l'objet de ces classes.

List<abc> f =new ArrayList<abc>(); 
f.add(new mno()); 
f.add(new pqr()); 
f.add(new xyz()); 

Yat-il un moyen de vérifier si la liste f contient un objet de classe xyz et retirer de la liste.

J'ai essayé f.contains (xyz.class) ou f.contains (nouveau xyz()), mais il est revenu flase

+2

LOOKUP mot-clé –

+1

instanceOf Je me demande si cela est un (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) [XY problème] où vous pouvez mieux vaut utiliser une approche complètement différente, comme une collection ou des collections différentes. –

+0

Et au-delà: lisez les conventions de codage Java. Les noms de classe commencent en majuscules. Toujours. – GhostCat

Répondre

0

Vous devez utiliser instanceof opérateur de vérifier qu'un objet est de type spécifique, comme indiqué ci-dessous :

Iterator<abc> iterator = f.iterator(); 
    while(iterator.hasNext()) { 
     if(iterator.next() instanceof xyz) { 
      iterator.remove(); 
     } 
    } 

En outre, le code ci-dessus utilise Iterator pour éliminer en toute sécurité les objets de la liste.

En outre, je vous suggère fortement de suivre les conventions de nommage Java pour les classes, les variables, etc., car vos noms de classes d'exemples abc, xyz, etc. sont très pauvres.

4

Si vous utilisez Java 8, vous pouvez le faire:

f.removeIf(xyz.class::isInstance); 
1

Vous pouvez utiliser Java 8 cours d'eau.

List<abc> newList = new ArrayList<>(f) 
      .stream() 
      .filter(xyz.class::isInstance) 
      .collect(Collectors.toList());