java - 使用 Java 8 链接 reduce 的最佳方式

标签 java java-8

我正在尝试改进以下代码:

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/

相关文章:

java - 带有 Copy Artifact 插件的 Jenkins

java - 如何从主函数打印(另一个函数的)整数?

java - 我的 Java 8 源代码的 Maven 编译失败

java - 使用 JavaFX WebView 时未加载 iframe

java - Java中的正则表达式(重复边界模式)

java - 当没有定义请求对象时,如何使用 Spring Boot 发送 SOAP 请求

java - 如何在 java 8 或更高版本编译的 java 7 上运行 Jar

java - 创建一个自定义的类 IntStream 类

java - ModelMapper 处理 java 8 可选 <MyObjectDto> 字段到可选 <MyObject>

Java 8 流 : For Each