在以下代码中使用map时出错

时间:2016-02-12 14:38:06

标签: java lambda java-8 final

List<Double> NormalizedData = Doublevalues1.stream().map(n -> (((((n-min)/(max-min)))*2)-1)).collect(Collectors.toList());

此处maxmin属于double数据类型

我的错误开始在行中可以任何人帮助我这方面

错误是&#34;从lambda表达式引用的局部变量必须是最终的或有效的最终&#34;

3 个答案:

答案 0 :(得分:4)

  

从lambda表达式引用的局部变量必须是最终的或有效的最终

您只能使用未更改的变量。如果它抱怨min,您可能需要复制一份

int min2 = min; // after this use min2, but don't change it.

注意:某些IDE具有自动修复功能。查看是否突出显示了您的任何变量,IDE可能能够为您纠正此错误。

答案 1 :(得分:3)

正如错误所述,您应该先将minmax定义为final,然后才能在labmda表达式中使用它们:

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

答案 2 :(得分:2)

final double max1 = max;
      final double min1 = min;
     List<Double> NormalizedData = Doublevalues1.stream().map(n -> (((((n-min1)/(max1-min1)))*2)-1)).collect(Collectors.toList());

这将有效