java stream使用不当引发的线上问题
·
问题重现
如下案例代码:
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;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)