2014-10-09 65 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