在 forEach Java 8 里面积累

Jul*_*lio 4 java java-8

如何在 forEach 中累积?这是我的代码:

public Double accumulate() {
        Double accum = 0d;

        numbers.stream().forEach(p-> {

            // if condition
                accum = accum + numbers.getAmount();
            // else
                accum = accum + numbers.getAmountWithInterest();
        });

        return accum;
    }
Run Code Online (Sandbox Code Playgroud)

也许我应该使用 map 而不是 forEach,我尝试了几件事,但没有奏效。谢谢

Ham*_*riZ 12

我认为在使用 lambda 时产生副作用不是一个好主意。这是混合函数式编程和命令式编程的一种糟糕方式。你可以通过

numbers.stream().mapToInt(p-> {
    // if condition
        return numbers.getAmount();
    // else
        return numbers.getAmountWithInterest();
}).sum();
Run Code Online (Sandbox Code Playgroud)

  • 应该是“map”,而不是“mapToInt”。 (2认同)