Я пытаюсь использовать сокращение, чтобы суммировать значение HashMap.java уменьшить на массив в классе
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. Тем не менее, у меня есть проблема с:
локальной переменной, определенной в области видимости, должны быть окончательными и эффективно окончательное
В принципе я не хочу, чтобы определить окончательную переменную в качестве члена класса, как решить Это?
Или есть ли смысл суммировать стоимость? (без петли?)
Это, вероятно, переменная 'i' здесь. Попробуйте определить окончательную копию внутри цикла, например. 'final int k = i', а затем использовать' getFlows() [k] 'в лямбда. – Thomas
Также используется оператор приращения postfix: i ++ – eg04lt3r
Префикс работает так же точно, как постфикс в циклах 'for'. – Keppil