是否有可能让lambda表达式捕获一个不是最终的变量?
我知道我的代码可以完美地工作,如果它可以捕获它们,目前我必须创建一个新的变量来复制我希望传递给lambda表达式的非final变量。
final SomeClass otherObj;
for(int i = 0; i < 10; i++) {
int a = i;
someObject.method(() -> otherObj.process(a, a+1))
}
我想传递&#39; i&#39;而不是必须创建一个新的临时变量。
答案 0 :(得分:6)
您可以尝试使用java8,
IntStream.range(0, 10).forEach(i ->{
someObject.method(() -> otherObj.process(i, i+1))
});
答案 1 :(得分:1)
我使用了java.util.concurrent.atomic
包。
以下是一个例子:
AtomicInteger tifCount = new AtomicInteger(0);
try(DirectoryStream<Path> ds = Files.newDirectoryStream(Paths.get("C:\\ImageStorage")) {
ds.forEach(path -> {
if (FileSystems.getDefault().getPathMatcher("glob:**.tif").matches(path)) {
tifCount.incrementAndGet();
}
});
}