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());