在java 8流中添加Bigdecimals

时间:2016-06-06 13:47:32

标签: java java-8 java-stream bigdecimal

我想知道一种方式是否比另一方式更有效。是否有更好的java 8方式来执行以下操作?

java 8方式

BigDecimal total = entries.parallelStream()
    .map(poec -> BigDecimal.valueOf(poec.getQuantity().longValue() * poec.getAdjustedUnitPrice().doubleValue()))
    .collect(Collectors.toList()).stream()
    .reduce(BigDecimal.ZERO, BigDecimal::add);

普通Java 7方式

    for (final EntryConsumed poec : entries) {
      total = total.add(BigDecimal.valueOf(poec.getQuantity().longValue() * poec.getAdjustedUnitPrice().doubleValue()));
    }

1 个答案:

答案 0 :(得分:1)

您的Java 8解决方案中有一些冗余代码。它可以简化为:

BigDecimal total = entries.parallelStream()
            .map(poec -> BigDecimal.valueOf(poec.getQuantity().longValue() * poec.getAdjustedUnitPrice().doubleValue()))
            .reduce(BigDecimal.ZERO, BigDecimal::add);

至于性能,您可以通过对两种解决方案进行基准测试来自行计算。