Java List过滤:根据ids数组高效筛选工具指南
摘要
一、集合筛选实战:Stream filter 与 Arrays asList 的包装类陷阱 日常编码中,从集合中提取符合
一、集合筛选实战:Stream filter 与 Arrays.asList 的包装类陷阱
日常编码中,从集合中提取符合特定条件的元素是高频操作。Java 8 的 Stream API 配合 filter 方法,结合 Arrays.asList 与 contains 的组合,能大幅简化过滤逻辑。但一个极易被忽视的坑点在于:用于匹配的数组元素类型必须声明为包装类 Integer,一旦误用基本类型 int[],过滤结果将直接为空,无法筛选出任何目标数据。
具体实现思路如下:首先构建一个包含 10 个 User 对象的列表,每个对象封装了 id 与 name 两个字段。接着定义一个 Integer 类型数组 arr,存放待筛选的 id 值(1、2、5、6、9)。通过 stream() 将列表转为流,调用 filter 方法时,核心条件表达式为 Arrays.asList(arr).contains(item.getId()),即判断当前元素的 id 是否存在于目标数组内。最后通过 collect(Collectors.toList()) 聚合结果,并使用 forEach 打印输出。
关键注意事项已在注释中明确标注:数组声明必须采用 Integer[] 而非 int[]。根本原因在于 Arrays.asList 接收泛型参数,当传入 int[] 时,它会被视为单个整体元素而非元素列表,导致 contains 无法正确匹配每个 id,过滤逻辑因此完全失效。
二、代码实现
直接看具体实现,逻辑清晰明了:
@Test
public void listFilter() {
List list = new ArrayList<>();
list.add(new User(1, "a"));
list.add(new User(2, "b"));
list.add(new User(3, "c"));
list.add(new User(4, "d"));
list.add(new User(5, "e"));
list.add(new User(6, "f"));
list.add(new User(7, "g"));
list.add(new User(8, "h"));
list.add(new User(9, "i"));
list.add(new User(10, "j"));
//注意:数组类型必须使用Integer才可以,使用int会判断失败
Integer[] arr = new Integer[]{ 1,2,5,6,9};
List filterList = list.stream()
.filter(item -> Arrays.asList(arr).contains(item.getId()))
.collect(Collectors.toList());
filterList.stream().forEach(System.out::println);
}





来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。