Java 在以下代码中使用map时出错 List NormalizedData=Doublevalues1.stream().map(n->(((((n-min)/(max-min)))*2)-1)).collect(collector.toList());
此处Java 在以下代码中使用map时出错 List NormalizedData=Doublevalues1.stream().map(n->(((((n-min)/(max-min)))*2)-1)).collect(collector.toList());,java,lambda,java-8,final,Java,Lambda,Java 8,Final,此处max和min为double数据类型 我的错误是从一行开始的,在这方面有人能帮我吗 错误为“从lambda表达式引用的局部变量必须是final或有效final” 从lambda表达式引用的局部变量必须是final或有效final 只能使用未更改的变量。如果它抱怨min,您可能需要复印一份 List<Double> NormalizedData = Doublevalues1.stream().map(n -> (((((n-min)/(max-min)))*2)-1)).c
max
和min
为double
数据类型
我的错误是从一行开始的,在这方面有人能帮我吗
错误为“从lambda表达式引用的局部变量必须是final或有效final”
从lambda表达式引用的局部变量必须是final或有效final
只能使用未更改的变量。如果它抱怨min
,您可能需要复印一份
List<Double> NormalizedData = Doublevalues1.stream().map(n -> (((((n-min)/(max-min)))*2)-1)).collect(Collectors.toList());
注意:一些IDE对此有一个自动修复。查看是否突出显示了任何变量,IDE可能可以为您更正此错误。如错误所述,在labmda表达式中使用前,应将
min
和max
定义为final
:
int min2 = min; // after this use min2, but don't change it.
final double min=//一些值
final double max=//其他值
列表规范化数据=
Doublevalues1.stream()
.map(n->(((((n-min)/(max-min)))*2-1)
.collect(Collectors.toList());
最终双精度最大值1=最大值;
最终双精度最小值1=最小值;
List NormalizedData=Doublevalues1.stream().map(n->(((((n-min1)/(max1-min1)))*2)-1)).collect(collector.toList());
这将起作用他们只需要有效地
final
。虽然将它们设置为final
会有一个很好的副作用,即指示OP重新分配的位置。它们可以改为有效的final。它不起作用,因为我使用loop@Akhil这当然有效。变量总是不可变的-您只需要在较小的范围内分配给新变量。为了获得更好的帮助,请发布一个而不是一个代码片段。@Boristespider和/或向上投票给他们或他们的注释。注意,在Java中变量总是在camelCase
-PascalCase
是为类
保留的。请坚持Java命名约定,特别是在公共论坛上发布时,人们已经习惯了这种约定。
final double min = // some value
final double max = // some other value
List<Double> NormalizedData =
Doublevalues1.stream()
.map(n -> (((((n-min)/(max-min)))*2)-1))
.collect(Collectors.toList());
final double max1 = max;
final double min1 = min;
List<Double> NormalizedData = Doublevalues1.stream().map(n -> (((((n-min1)/(max1-min1)))*2)-1)).collect(Collectors.toList());