2016-05-31 1 views
2

複数のフィルタを使用してコレクションをフィルタリングしたいと思います。多くのフィルタを使用するJava 8 - フィルタコレクション

文字列のリストと、空の文字列をフィルタリングするための関数filter()があるとします。

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

一般的に、私はこのようなストリームを使用します。ストリームを使用して、コレクション(ListまたはSet)から複数のフィルタを適用する

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

どのように?

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); 
関連する問題