java - 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 表达式的主体并编写一个带有标志的函数来检查每个过滤器?
解决方案
您应该改为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());
推荐阅读
- javascript - 如何在调用此类的构造函数时创建 ES6 类的对象数组?
- gtk - Glade:如何让按钮关闭窗口?
- python - 如果包含子字符串,则同时替换多个字符串
- r - 在R中使用正则表达式从字符串中提取信息
- jenkins - Jenkins:maven 发布插件忽略依赖分类器
- javascript - 使用 mapStateWithProps 后,React redux 无法在组件事件中找到道具
- c# - 过滤或检查日期范围内的日期
- visual-studio-code - 如何增加 VS Code 中“最近打开”中列出的文件夹/工作区的数量?
- c# - 使用 C# 下载 URL Content-Disposition excel 文件
- android - Android:上下文菜单项单击导致变量改变状态