【发布时间】:2014-07-22 17:10:00
【问题描述】:
考虑到 lambda 在 for 循环中的这种情况,我希望计数器 i 实际上是最终的。
编译器抱怨 i 不是最终的,所以我不得不使用 i2。
for (int i = 0; i < x.getBooks().size(); i++){
//The compiler needs i to be effectively final.
int i2 = i;
List<Book> books = bookstore.stream()
.filter(c -> c.getAuthors().get(i2).equals("xxx"))
.collect(Collectors.toList());
}
所以问题是为什么 i 在 for 循环的范围内不是有效的 final ,这是最简单的解决方法。
【问题讨论】:
-
你在哪里使用
i或i2? -
有效吗?我不确定那是什么意思。您的代码甚至没有在 lambda 中使用
i -
为错字道歉 - 现已编辑。
-
这实际上是 final 的意思 stackoverflow.com/questions/20938095/…
-
IMO 他们应该允许
final int i,这将阻止在 for 构造之外修改i。
标签: java for-loop lambda java-8