2017-03-18 34 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());