菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI教程 > Java List过滤:根据ids数组高效筛选工具指南
进阶教程 List过滤

Java List过滤:根据ids数组高效筛选工具指南

2026-06-01
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

一、集合筛选实战:Stream filter 与 Arrays asList 的包装类陷阱 日常编码中,从集合中提取符合

一、集合筛选实战:Stream filter 与 Arrays.asList 的包装类陷阱

日常编码中,从集合中提取符合特定条件的元素是高频操作。Java 8 的 Stream API 配合 filter 方法,结合 Arrays.asListcontains 的组合,能大幅简化过滤逻辑。但一个极易被忽视的坑点在于:用于匹配的数组元素类型必须声明为包装类 Integer,一旦误用基本类型 int[],过滤结果将直接为空,无法筛选出任何目标数据。

具体实现思路如下:首先构建一个包含 10 个 User 对象的列表,每个对象封装了 idname 两个字段。接着定义一个 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);
}

image.png

image.png
image.png
image.png
image.png

来源:互联网

免责声明

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

同类文章推荐

相关文章推荐

更多