我正在尝试改进以下代码:
BigDecimal total = entity.getAssociate().stream().map(Associates::getPropertyA)
.reduce(BigDecimal.ZERO, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyB)
.reduce(total, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyC)
.reduce(total, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyD)
.reduce(total, BigDecimal::add);
它有效,但确实感觉有更好的方法来做到这一点。有人可以就此事告诉我吗?
最佳答案
如果所有这些属性都是同类型的(好像都是BigDecimal
),你可以使用flatMap
来创建一个单一的Stream
全部,然后 reduce
到总和:
BigDecimal total =
entity.getAssociate()
.stream()
.flatMap (a -> Stream.of(a.getPropertyA(),a.getPropertyB(),a.getPropertyC(),a.getPropertyD()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
关于java - 使用 Java 8 链接 reduce 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44925699/