Collections.forEach:如何添加值?

时间:2014-11-30 00:38:06

标签: java lambda java-8

List<Transaction> Transaction amount BigDecimalamount

我想在此列表中添加所有BigDecimal spent = new BigDecimal("0.0"); transactions.forEach(t -> spent.add(t.getAmount())); System.out.println(spent); 。我做了一些事情

spent

当我运行时,0.0原来是transactions.forEach(t -> spent = spent.add(t.getAmount()));

此外,语法for each会引发编译错误。

我正在尝试学习而不使用{{1}}循环

想法?

2 个答案:

答案 0 :(得分:3)

在阅读Adding up BigDecimals using Streams之后,我发现以下是我需要的内容

final Function<Transaction, BigDecimal> transactionAmountMapper = Transaction::getAmount;
final BigDecimal result = entry.getValue().stream().map(transactionAmountMapper).reduce(BigDecimal.ZERO, BigDecimal::add);

答案 1 :(得分:1)

尝试使用流而不是foreach

    List<BigDecimal> list = new ArrayList<>();

    list.add(new BigDecimal(10));
    list.add(new BigDecimal(10));
    list.add(new BigDecimal(10));
    BigDecimal total = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);

    System.out.println(total);