问题重现

如下案例代码:

public class Test {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();
        stringList.add("1");
        stringList.add("2");

        System.out.println(stringList);
        filter(stringList);

        System.out.println(stringList);
    }

    private static void filter(List<String> stringList) {
        stringList = stringList.stream().filter(s -> {
            return s.equals("1");
        }).collect(Collectors.toList());
        System.out.println(stringList);
    }
}

我期望的结果是经过filter函数,stringList中只有一个元素,事实上并不是
打印的结果是:

[1, 2]
[1]
[1, 2]

问题原因

经过stream.filter之后,不会更改原数据对象,而是会产生一个新的数据流,除非显示返回

解决方案

filter方法返回.stream.filter处理后的数据,然后在main方法中重新修改指向处理后的数据

public class Test {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>();
        stringList.add("1");
        stringList.add("2");

        System.out.println(stringList);
        stringList = filter(stringList);

        System.out.println(stringList);
    }

    private static  List<String> filter(List<String> stringList) {
        stringList = stringList.stream().filter(s -> {
            return s.equals("1");
        }).collect(Collectors.toList());
        System.out.println(stringList);
        return stringList;
    }
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐