gpt4 book ai didi

Java lambda - for 循环计数器实际上不是最终的

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:47 24 4
gpt4 key购买 nike

鉴于 lambda 在 for 循环内的这种情况,我希望计数器 i 有效地最终。

编译器提示 i 不是有效的 final,所以我不得不使用 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 并且这是最简单的解决方法。

最佳答案

正如其他答案所提到的,effectively final 意味着一个变量只能被赋值一次并且不会被重新赋值。在 for 循环中情况并非如此。 effectively final 存在,否则开发人员必须将变量显式标记为 final 才能在 lambda 中使用它。

但是,我回答的原因是一个解决方案,即在不重复 i 的情况下编写您的代码:

IntStream.range (0, x.getBooks().size()).forEach (i -> {
List<Book> books = bookstore.stream()
.filter(c -> c.getAuthors().get(i).equals("xxx"))
.collect(Collectors.toList());
});

关于Java lambda - for 循环计数器实际上不是最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com