2016-05-31 4 views
2

여러 필터를 사용하여 컬렉션을 필터링하고 싶습니다.많은 필터를 사용하는 Java 8 - 필터 컬렉션

빈 문자열을 필터링하기 위해 문자열 목록과 함수 filter()이 있다고 가정 해 보겠습니다.

List<String> myList = ....... 

일반적으로,이 같은 스트림을 사용합니다 :

myList.stream() 
     .filter(elem -> filterOut(elem)) 
     .collect(Collectors.toList()); 

어떻게 스트림을 사용하여 모음 ( List 또는 Set)에서 여러 필터를 적용?

Set<Predicate> myFilters = ..... 
+0

할 수 있습니다로 체인 및하여 체인 여러 술어() 함수를 –

답변

2
myList.stream() 
     .filter(s -> myFilters.stream().allMatch(p -> p.test(s))) 
     .collect(Collectors.toList()); 

또는 당신은 구아바의 팬이라면 :

com.google.common.base.Predicate<String> combined = Predicates.and(Iterables.transform(myFilters, p -> p::test)); 
myList.stream() 
     .filter(combined::apply) 
     .collect(Collectors.toList()); 
2
Predicate combinedPredicate = myFilters.stream().reduce(Predicate::or).orElse(t -> false); 
관련 문제