【发布时间】:2016-01-20 13:43:27
【问题描述】:
我尝试使用 reduce 对 HashMap 值求和。
public class Link
{
private double[] flows;
public Link(double[] f) {
setFlows(f);
}
public double[] getFlows() {
return flows;
}
public void setFlows(double[] flows) {
this.flows = flows;
}
public static void main(String argv[])
{
// TEST for reduce on HashMap
HashMap<Integer, Link> id1 = new HashMap<Integer, Link>();
id1.put(1, new Link(new double[]{10,1,30}));
id1.put(2, new Link(new double[]{20,2,3}));
id1.put(3, new Link(new double[]{30,2,3}));
id1.put(4, new Link(new double[]{40,2,30}));
double[] my_sum = new double[3];
for (int i=0; i < 3; ++i)
{
my_sum[i] = id1.entrySet().stream().mapToDouble(e->e.getValue().getFlows()[i]).sum();
}
assert(my_sum[0] == 100);
assert(my_sum[1] == 7);
assert(my_sum[2] == 66);
}
}
在 for 循环中,我想对 Link 类中每个数组项的值求和。但是,我有以下问题:
在封闭范围内定义的局部变量必须是最终的或有效的最终
基本上我不想将final变量定义为类成员,如何解决?
或者有没有更好的总结价值? (没有 for 循环?)
【问题讨论】:
-
这里可能是变量
i。尝试在循环中定义最终副本,例如final int k = i然后在 lambda 中使用getFlows()[k]。 -
也使用后缀自增运算符:i++
-
前缀和
for循环中的后缀一样好。
标签: java arrays java-8 java-stream final