Sid*_*tha 12 java lambda final executorservice
我试图通过执行程序和runnable并行执行100个任务,任务需要使用循环变量:
for (int i = 0; i < 100; i++) {
executor.execute(() -> {
doSomething(String.format("Need task number %d done", i));
}
});
}
Run Code Online (Sandbox Code Playgroud)
在'我'说的时候,我得到一个波浪形的 - Variable used in lambda expression should be effectively final.
据我所知,循环变量不能是最终的或有效的最终变量,因为它随着每次迭代而被更改.我发现了一个简单的解决方法,
for (int i = 0; i < 100; i++) {
int index = i;
executor.execute(() -> {
doSomething(String.format("Need task number %d done", index));
}
});
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不是最有效的解决方案,在每次迭代时声明一个新变量.有没有更好的方法呢?
Psh*_*emo 14
有没有更好的方法呢?
我对此表示怀疑.您的解决方案对我来说很好,但如果您愿意,可以将其重写为可能更清晰的代码,例如:
IntStream.range(0, 100).forEach(
i -> executor.execute(
() -> doSomething(String.format("Need task number %d done", i))
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2556 次 |
| 最近记录: |