可以利用Atomic原子类解决,当然和线程安全没有关系,纯粹是利用了这样一个技巧:AtomicInteger可以当作int的容器。因为它是在堆上被分配的,我们完全没有改变这个局部变量的指向(effectively final成立),就达到了修改其中数据的目的。
//在lambda中实现对外面变量i++的操作
AtomicInteger i = new AtomicInteger();
list.forEach(a -> i.getAndIncrement());
可以利用Atomic原子类解决,当然和线程安全没有关系,纯粹是利用了这样一个技巧:AtomicInteger可以当作int的容器。因为它是在堆上被分配的,我们完全没有改变这个局部变量的指向(effectively final成立),就达到了修改其中数据的目的。
//在lambda中实现对外面变量i++的操作
AtomicInteger i = new AtomicInteger();
list.forEach(a -> i.getAndIncrement());