如何过滤Collection以获得两个不同类型的列表

时间:2014-02-08 09:36:43

标签: java validation collections filter

我有以下问题:

我想根据某些条件验证我的数据,我的数据是一个集合List<ClassA> 在验证时我想过滤我的List<ClassA>,以便最终得到 List<ClassA>仅包含有效数据,List<ClassB>由无效数据组成。

我目前只有两个关于如何做的想法,但我不喜欢它们。

  1. 我创建了具有List<ClassA>List<ClassB>的ClassC,我使用Validator类的validate方法返回

    List<ClassC> validate(List<ClassA>)  
    

    这个appraoch的问题在于,ClassA是请求对象而ClassB是响应对象,因此将它们放入Class看起来有点奇怪。

  2. 我的Validator类hava有效方法但不返回任何内容。相反,它还有另外两个方法,getValidData和getInvalidData,它们相应地返回List<ClassA>List<ClassB>,这些方法是使用validate方法运行创建的

    void validate(List<ClassA>)
    List<ClassA> getValidData()
    List<ClassB> getInvalidData()
    

    我更喜欢那个,但我仍然不满意,因为方法需要按顺序运行。

  3. 任何想法如何更好地处理这样的问题?

1 个答案:

答案 0 :(得分:1)

如果您始终需要验证列表,则可以事先执行此操作并仅显示getValidgetInvalid方法:

public class Validator {

    private final List<A> all;
    private final List<A> invalid = new ArrayList<>();
    private final List<A> valid = new ArrayList<>();

    public Validator(List<A> all) {
        this.all = new ArrayList<> (all);
        validate(all); 
    }
    private void validate(List<A> all) {
        //populate invalid and valid
    }
    public List<A> getInvalid() { return invalid; }
    public List<A> getValid() { return valid; }
}