【问题标题】:How to filter Collection in order to get two Lists of different types如何过滤集合以获得两个不同类型的列表
【发布时间】:2014-03-05 20:18:05
【问题描述】:

我有以下问题:

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

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

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

    List<ClassC> validate(List<ClassA>)  
    

    这种方法的问题在于,ClassA 是请求对象,ClassB 是响应对象,所以将它们放入 Class 看起来有点奇怪。

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

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

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

知道如何更好地处理此类问题吗?

【问题讨论】:

    标签: java validation collections filter


    【解决方案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; }
    }
    

    【讨论】:

    • 感谢 assylias。看起来更干净,会这样做。
    猜你喜欢
    • 2016-05-09
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多