Jac*_*ack 3 java eclipse java-stream
我有一点问题.当我写这个for循环时,if.getAnswerScore().get(i)....中的变量带有错误消息的下划线: - 我在封闭范围内定义的局部变量必须是最终的或有效的最终.这与流有关吗?也许流不能用于循环?
for (int i = 0; i < 10; i++) {
correct = active.stream()
.filter(f -> f.getAnswerScore().get(i).getStatus().equals(AnswerStatus.ANSWERED_CORRECT))
.count();
}
Run Code Online (Sandbox Code Playgroud)
与匿名内部类一样,lambda表达式只能访问局部变量,如果它们是final"有效最终"(Java 8或更高版本;不是,final但一旦分配就不会更改).
使用但未在lambda表达式中声明的任何局部变量,形式参数或异常参数必须声明
final或有效最终(§4.12.4),否则在尝试使用时会发生编译时错误.必须在lambda体之前明确赋值(§16(Definite Assignment)),否则在lambda体中使用但未声明的任何局部变量,或发生编译时错误.
关于变量使用的类似规则适用于内部类的主体(第8.1.3节).对有效最终变量的限制禁止访问动态变化的局部变量,其捕获可能会引入并发问题.与最终限制相比,它减少了程序员的文书负担.
声明一个final等于的变量i并使用它.
for(int i = 0; i< 10; i++){
final int j = i;
correct = active
.stream()
.filter(f-> f.getAnswerScore().get(j).getStatus().equals(AnswerStatus.ANSWERED_CORRECT))
.count();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4420 次 |
| 最近记录: |