首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8-使用多个过滤器的过滤器集合

Java 8-使用多个过滤器的过滤器集合
EN

Stack Overflow用户
提问于 2016-05-31 14:56:46
回答 2查看 1.4K关注 0票数 2

我想使用多个过滤器过滤出我的集合。

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

代码语言:javascript
复制
List<String> myList = .......

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

代码语言:javascript
复制
myList.stream()
        .filter(elem -> filterOut(elem))
        .collect(Collectors.toList());

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

代码语言:javascript
复制
Set<Predicate> myFilters = .....
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-31 15:22:04

代码语言:javascript
复制
myList.stream()
        .filter(s -> myFilters.stream().allMatch(p -> p.test(s)))
        .collect(Collectors.toList());

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

代码语言:javascript
复制
com.google.common.base.Predicate<String> combined = Predicates.and(Iterables.transform(myFilters, p -> p::test));
myList.stream()
        .filter(combined::apply)
        .collect(Collectors.toList());
票数 3
EN

Stack Overflow用户

发布于 2016-05-31 15:07:25

代码语言:javascript
复制
Predicate combinedPredicate = myFilters.stream().reduce(Predicate::or).orElse(t -> false);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37549121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档