我想使用多个过滤器过滤出我的集合。
让我们假设我有一个字符串列表和一个函数filter()来过滤空字符串。
List<String> myList = .......通常,我会使用这样的流:
myList.stream()
.filter(elem -> filterOut(elem))
.collect(Collectors.toList());如何使用流从集合(List或Set)应用多个过滤器?
Set<Predicate> myFilters = .....发布于 2016-05-31 15:22:04
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());发布于 2016-05-31 15:07:25
Predicate combinedPredicate = myFilters.stream().reduce(Predicate::or).orElse(t -> false);https://stackoverflow.com/questions/37549121
复制相似问题