2014-02-08 3 views
1

다른 종류의 두 개의 목록을 얻기 위해 컬렉션을 필터링하는 방법 :내가 문제 다음 한

나는 몇 가지 조건에 따라 내 데이터의 유효성을 검사 할

, 내 데이터가 수집 List<ClassA> 내가 내를 필터링 할의 유효성을 검사하는 중입니다 List<ClassA> 그래서 결국 유효한 데이터로만 구성된 List<ClassA>과 유효하지 않은 데이터로 구성된 List<ClassB>이 생깁니다.

나는 현재 어떻게해야하는지에 대해 2 가지 아이디어 만 가지고 있지만 나는 그 중 어느 것도 좋아하지 않는다.

  1. 나는 내 Validator 클래스의 validate 메소드로 반환 List<ClassA>List<ClassB>을 가지고 ClassC를 만들

    List<ClassC> validate(List<ClassA>) 
    

    이 appraoch의 문제를 ClassA는 요청 객체가 있다는 것입니다 및 ClassB가 그렇게 응답 개체입니다 그것들을 클래스에 넣는 것은 이상하게 보입니다.

  2. 유효한 내 유효성 검사기 클래스 hava하지만 아무것도 반환하지 않습니다. 대신은 validate 메소드를 실행하여 만든 따라 List<ClassA>List<ClassB>를 돌려 두 가지 다른 방법, getValidData 및 getInvalidData

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

    내가 하나 더 좋아하지만 난 아직 방법을 순서대로 실행할 필요가 같이하지 행복이있다.

이러한 문제를 어떻게 해결할 수 있습니까?

답변

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; } 
} 
+0

감사 assylias을. 훨씬 더 깨끗하게 보입니다. 이렇게하면됩니다. – user3225361