首页 > 解决方案 > java流过滤器列表

问题描述

假设我有一个字符串列表,我想通过过滤字符串列表过滤它们。对于包含以下内容的列表:“abcd”、“xcfg”、“dfbf”

我会精确的过滤字符串列表:“a”,“b”,在过滤器(i->i.contains(filterStrings)之类的东西之后我想接收“abcd”,“dfbf”的列表,以及一个列表过滤字符串:“c”、“f”我想接收“xcfg”和“dfbf”的列表。

List<String> filteredStrings = filteredStrings.stream()
            .filter(i -> i.contains("c") || i.contains("f")) //i want to pass a list of filters here
            .collect(Collectors.toList());

是否有其他方法可以做到这一点,而不是扩展 lambda 表达式的主体并编写一个带有标志的函数来检查每个过滤器?

标签: javafilterjava-stream

解决方案


您应该改为anyMatch对列表执行 a 以匹配:

List<String> input = Arrays.asList("abcd", "xcfg", "dfbf"); // your input list
Set<String> match = new HashSet<>(Arrays.asList("c", "f")); // to match from
List<String> filteredStrings = input.stream()
        .filter(o -> match.stream().anyMatch(o::contains))
        .collect(Collectors.toList());

推荐阅读