小编在开发中遇到,对 list 使用 lambda 方式遍历操作,计算 count 值时,idea 错误警告的场景。原来 Lambda 不支持常规的计数方式,这里可以使用 Java 的原子操作类 — AtomicInteger 。下面,小编展示一下 idea 错误警告的场景以及 AtomicInteger 使用场景:
1,错误警告场景:
/**
* @author:
* @description:
* @date: 2022/3/31
**/
public class AtomicIntTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
int count = 0;
list.forEach(item -> {
count++;
});
/**
* 错误警告!!!!!:
* Variable used in lambda expression should be final or effectively final
*/
}
}
2,改进,使用 AtomicInteger。
/**
* @author:
* @description:
* @date: 2022/3/31
**/
public class AtomicIntTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
AtomicInteger count = new AtomicInteger(0);
list.forEach(item -> {
int i = count.incrementAndGet(); // 自增1,并返回自增后的值
System.out.println("===count: " + i);
});
}
}
输出:
"C:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe"
===count: 1
===count: 2
===count: 3
===count: 4
Process finished with exit code 0