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

标签 java collections java-8 java-stream

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

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

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

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

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

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

Set<Predicate> myFilters = .....

最佳答案

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

或者,如果您是 Guava 的粉丝:

com.google.common.base.Predicate<String> combined = Predicates.and(Iterables.transform(myFilters, p -> p::test));
myList.stream()
        .filter(combined::apply)
        .collect(Collectors.toList());

关于Java 8 - 使用许多过滤器的过滤器集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549121/

相关文章:

java - 如何在可完成的 future 测试异常?

java - 应用程序关闭后存储整数值并检索它

java - 与 UI 线程通信 Android : User Inactivity

java - Tomcat 不卸载 Web 应用程序

forms - 原型(prototype)字段在表单(表单)之后为空,但在表单(表单)之前设置时设置 symfony

java - 在 Spliterator .tryAdvance() 的实现中使 action .accept() 超过一个元素是否有任何危险?

Java enum.valueOf(String) 和 enum.class

java键值对,键查找为 "startswith"

java - Collections.shuffle() 真的足够随机吗?实际例子似乎否定了这种说法

android - get 方法返回可选的 No_Value