Аккумулятор потоков Java8

Попытка создать аккумулятор для списка, например

public List<Double> accumulator(List<Double> originalList){
  List result = new ArrayList<>();
    Iterator<Double> iterator = originalList.iterator();
    double sum = 0;
    while(iterator.hasNext()){
        sum = iterator.next() + sum;
        result.add(sum);
    }
    return result;
}

Я пытаюсь преобразовать это в использование Streams API, единственный способ, которым я могу думать, - это начать с создания некоторого раздела и суммирования результатов.

вход [20,15,25]

разделы:

[20] = 20

[20,15] = 35

[20,15,25] = 60

окончательный результат: [20,35,60]

Любые идеи?


person dotmindlabs    schedule 22.05.2015    source источник
comment
Моя цель - список с накопленными значениями, например, если входной список равен 10,20,30, результирующее накопление будет 10,30,60.   -  person dotmindlabs    schedule 22.05.2015
comment
ну, я начал с приведенного выше кода и рассказал об использовании IntStream.range(0, size) для создания нескольких разделов с помощью ArrayList(originalList.subList(0,i), а затем я мог использовать сокращение, но не смог создать разделы, поэтому далеко   -  person dotmindlabs    schedule 22.05.2015
comment
Я знаю, что в Streams есть раздел, но он использует предикаты, а не индекс.   -  person dotmindlabs    schedule 22.05.2015
comment
Ну, вы не можете использовать сокращение, это делает одно значение. Я думаю, что карта - это то, что вам нужно. Вы должны разместить код, который вы написали, вместе с его выводом.   -  person markspace    schedule 22.05.2015
comment
да, я пробовал что-то вроде IntStream.range(0, size).map(i -> new ArrayList(originalList.subList(0,i)));   -  person dotmindlabs    schedule 22.05.2015
comment
По ссылке на дубликат здесь рекомендуется Arrays.parrallelPrefix(), что отстой, потому что это статический метод и возвращает void. Вот мой код: int[] arr = { 1, 2, 3 }; Arrays.parallelPrefix( arr, (s, e) -> s + e );   -  person markspace    schedule 23.05.2015