2014-10-09 33 views
3

我有一個bean的列表(List<AClass>),我從中創建了兩個基於一些邏輯的子列表,這些邏輯涉及從bean類中檢查一個字段,說action。如果列表迭代 - 通用邏輯

bean.getAction.equals("true") - add to new sublist - List<AClass> listA 
else - add to new sublist - List<AClass> listB 

我已經爲它創建了一個方法,它工作正常。

現在我對其他Bean類也有類似的任務,我也有List<BClass>,它也有動作域和getAction方法。我想創建一個通用的方法來迎合這些bean(以及其他類似的bean)。

我該如何創建這樣的方法?

+0

你真的需要這樣的方法嗎?也許最好定義Predicate並使用[commons collections](https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/CollectionUtils.html )filter()? – ursa 2014-10-09 11:53:27

回答

3

使用List<? extends ParentClass>其中ParentClassAClass父母BClass

3

如果AClassBClass共享一個共同的基礎,然後可以使用wilcard型 - List<? extends CommonBase>

+0

只需3秒後自己:) – luboskrnac 2014-10-09 11:06:00

+0

但是,然後每個參數可以是不同的類 – 2014-10-09 11:06:56

1

像這樣的東西應該工作:

interface HasAction { 
    public String getAction(); 
} 

public class AClass implements HasAction { 
    private final String action; 

    public AClass (String action) { 
     this.action = action; 
    } 

    @Override 
    public String getAction() { 
     return action; 
    } 

} 
public class BClass implements HasAction { 
    private final String action; 

    public BClass (String action) { 
     this.action = action; 
    } 

    @Override 
    public String getAction() { 
     return action; 
    } 

} 

public <T extends HasAction> List<T> subList(List<T> list) { 
    List<T> subList = new ArrayList<T>(); 

    for (T source : list) { 
     if (source.getAction().equals("true")) { 
      subList.add(source); 
     } 
    } 
    return subList; 
} 
+0

這正是我現在寫的,感謝您編寫代碼的額外努力! – Ankit 2014-10-09 11:51:33