Java8变量应该是最终的或有效的最终问题
我正在使用Java8流迭代和一个应该在其他类中使用的变量。所以我使用了下面的代码
AtomicBoolean bool = new AtomicBoolean(true);
public void testBool(){
list.stream().forEach(c->{
if( c.getName() != null){
bool.set(true);
}
});
}
public void test(){
if(bool.get()){
System.out.println("value is there");
}
}
但我听说使用原子物体有时会影响性能。在使用Java 8时,是否有其他方法使用forEach块之外的变量? 如果没有这一点,我得到的错误作为一个变量应该是一个最终或有效的最终错误
请帮我解决这个问题
提前谢谢
# 1 楼答案
有效的最终限制只适用于局部变量
由于您正在设置实例字段,因此只需使用:
boolean bool = true;
并从lambda中设置它如果需要使用局部变量,请在声明中添加
final
修饰符关于使用
AtomicBoolean
的开销,请记住流也有开销,如果您只在迭代中使用它们,最好使用for循环:最后,正如@Neela在评论中提到的,更有效地使用流的方法是使用以下代码*:
*注意,原始代码有一个错误,导致bool始终为true,这可以通过不预设true并直接输入anyMatch的结果来避免
# 2 楼答案
如果有任何名称不为null,则可以使用lambda表达式返回true或false,并将结果分配给布尔值,从而避免该问题
比如:
布尔值hasAnyWithNames=list。stream()。anyMatch(c->;c.getName()!=空)
顺便说一句,对于变量名来说,选择“bool”不是个好选择
编辑: