在一个复杂场景中,基于
list
的stream
中使用AtomicInteger
进行做数据统计,突然发现了个大问题。
stream 中 不执行转换 操作例如.collect(Collectors.toList())
相关流的操作是不执行的。
代码如下:
public static void main(String[] args) {
List<String> ls = new ArrayList<String>(10){
{
add("f");
add("u");
add("c");
add("k");
}
};
AtomicInteger integer = new AtomicInteger(0);
Stream<String> newLs = ls.stream().map(mp -> {
integer.updateAndGet((v1) -> v1 + 1);
return mp + "__";
});
System.out.println(integer.get());
System.out.println(newLs.collect(Collectors.joining(" ")));
System.out.println(integer.get());
}
结果如图