2010-08-09 47 views
0

我需要編寫一個方法來返回List(java.util.List)的視圖。返回的視圖應該只包含輸入列表中的那些元素,並在使用isSuccessful()方法進行測試時返回true。基於屬性獲取列表的視圖

List<Entity> getSuccessfulEntities(List<Entity> entities) 
{ 
    //Return a List view of entities, each element of which returns true for isSuccessful(entity) 
} 

我看過集合和列表API,但找不到任何設施。任何開箱的想法?

回答

1

沒有什麼(至少我所知道的)在Java標準庫,但你可以使用 com.google.common.collect.Collections2.filter()Predicate,這是剛剛定義爲:

public interface Predicate<T> { boolean apply(T input); } 

更改到未經過濾和過濾Collection相互影響。示例代碼:

Predicate<Entity> isSuccessful = new Predicate<Entity>() { 
    public boolean apply(Entity e) { 
     return e.isSuccessful(); 
    } 
}; 

Collection<Entity> successfulEntities = filter(entities, isSuccessful); 

相關:Java: What is the best way to filter a Collection?

+0

這創建了一個全新的ArrayList。我只想要一個實際上使用原始List的視圖(不可修改)。 – Jagat 2010-08-09 13:42:13

+0

@Jagat查看更新的答案 – NullUserException 2010-08-09 13:58:48

1

通用方法是定義測試T的實例,並返回boolean值的謂詞接口。

然後將一個Predicate實現的實例作爲getSuccesfulEntities的參數並遍歷集合,調用謂詞上的方法來確定它是否應該返回到集合中。