首页 > 教程攻略 > ai教程 >java工具:《list根据ids数组 过滤list》

java工具:《list根据ids数组 过滤list》

来源:互联网 时间:2026-06-01 19:24:41

一、介绍

日常开发中经常需要从集合里筛选出满足指定条件的元素。Ja va 8 的 Stream 流配合 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

相关阅读