如何使用Java 8 Streams计算运行余额[关闭]

问题描述 投票:-1回答:1

请帮我将以下计算转换为流

我有交易清单

class Transaction
{
  String id;
  Double amount;
  Double balance;
}

before calculation / input

amount   balance
100.0    null
-50.0    null
100.0    null
-100.0   null
200.0    null

我正在进行以下操作以在每次交易发生之前计算原始余额。注意负面交易是指添加到帐户的资金

  @Test
    public void runningBalanceWithoutUpdatingCurrent(){
        Double current=300d;
        for (int i = 0; i < transactions.size(); i++) {
            Transaction transaction = transactions.get(i);
           if(i==0)
            transaction.setBalance(current + transaction.getAmount());
           else
               transaction.setBalance(transactions.get(i-1).getBalance()+transaction.getAmount());
        }
        System.out.println();
        System.out.println("calculated");
        print(transactions);
    }

我的输出如下

calculated

amount   balance
100.0    400.0
-50.0    350.0
100.0    450.0
-100.0   350.0
200.0    550.0
java java-stream
1个回答
1
投票

没有太大的改进,但你可以使用IntStreamforEach并做这样的事情:

public void runningBalanceWithoutUpdatingCurrent(){
        if(transactions.size() > 0){
            Transaction transaction = transactions.get(0);
            transaction.setBalance(300d + transaction.getAmount());
        }

        IntStream.range(1, transactions.size())
                 .forEach(i -> { 
                        Transaction t = transactions.get(i);
                        t.setBalance(transactions.get(i-1).getBalance() + t.getAmount());
                  });

        System.out.println();
        System.out.println("calculated");
        print(transactions);
}
© www.soinside.com 2019 - 2024. All rights reserved.