Java 8 - filter collection using many filters [duplicate]

一笑奈何 提交于 2019-12-24 01:44:30

问题


I would like to filter out my collection using multiple filters.

Let's assume I have a list of Strings and a function filter() to filter out empty Strings.

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

Typically, I would use streams like this:

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

How to apply multiple filters from a collection (List or Set) using streams?

Set<Predicate> myFilters = .....

回答1:


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

Or if you're a fan of Guava:

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);


来源:https://stackoverflow.com/questions/37549121/java-8-filter-collection-using-many-filters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!