Акумулатор на 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
знам, че има дял в потоците, но той използва предикати, а не индекс.   -  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