如何使用Java 8流来计算运行余额



请帮助我将计算后转换为流

我有交易列表

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

不会有太大的改进,但是您可以将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);
}

最新更新