Java 8 - 使用许多过滤器过滤集合

时间:2016-05-31 14:56:47

标签: java collections java-8 java-stream

我想使用多个过滤器过滤掉我的收藏。

假设我有一个字符串列表和一个函数filter()来过滤掉空字符串。

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

通常,我会使用这样的流:

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

如何使用流应用集合中的多个过滤器(ListSet)?

Set<Predicate> myFilters = .....

2 个答案:

答案 0 :(得分:3)

<a href="javascript:void(0);" class="ic menu">
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
</a>
<a href="javascript:void(0);" class="ic close"></a>

或者如果你是番石榴的粉丝:

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

答案 1 :(得分:2)

Predicate combinedPredicate = myFilters.stream().reduce(Predicate::or).orElse(t -> false);