2017-03-18 121 views
-1

假设有所有扩展一个抽象类ABC几类: -检查对象的列表包含指定对象的Java

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

没有包含这些类的对象对象的列表。

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

有没有一种方法来检查清单f 包含类XYZ的对象,并从列表中删除它。

我试图f.contains(xyz.class)或f.contains(新的xyz()),但它返回FLASE

+2

LOOKUP}这种关键字 –

+1

我想知道,如果这是一个[XY问题】(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),您可以最好使用完全不同的方法,如不同的集合或集合。 –

+0

除此之外:阅读关于Java编码约定。类名以大写字母开头。总是。 – GhostCat

回答

0

您需要使用instanceof运营商检查的对象是特定类型的,如下图所示:

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

而且,上面的代码使用Iterator安全地从列表中删除的对象。

另外,我强烈建议您遵循类,变量等的Java命名约定,因为您的示例类名abc,xyz等非常差。

4

如果应用了Java 8,你可以做到这一点:

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

您可以使用Java 8流。

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