有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

流中的java和大小数

我正在使用Java8流,在其中我迭代两个集合,在通过一个过滤器后,我想将流中的一个bigdecimal变量与外部bigdecimal变量“restrictionsNumber”相加

这是我的代码:

     final BigDecimal restrictionsNumber = cmd.amount.getNumberOfUnits();
        order.products()
             .stream()
             .flatMap(product -> product.getRestrictions()
                                    .stream()
                                    .filter(restriction -> restriction.equals(newProductRestriction))
                                    .map(restriction -> restrictionsNumber.add(product.getAmount()
                                                                            .getNumberOfUnits())));

最后一张图是我试图将两个大小数相加的图。 我知道我做错了什么。 有谁能给我一个关于如何使用Stream的建议吗

我正试图从这个旧的时尚代码中重构

 final BigDecimal restrictionsNumber = cmd.amount.getNumberOfUnits();
 for (Product product : order.products()) {
     for (String oldProductRestriction : product.getRestrictions()) {
         if (oldProductRestriction.equals(newProductRestriction)) {
            restrictionsNumber = restrictionsNumber.add(product.getAmount()
                                                                       .getNumberOfUnits());
          }
      }
  }

问候


共 (2) 个答案

  1. # 1 楼答案

    这可能是您所需要的(但它会为每个产品多次添加相同的数量,与您的原始代码保持一致,这看起来很奇怪):

    BigDecimal sum = order.products()
         .stream()
         .flatMap(product -> product.getRestrictions()
                      .stream()
                      .filter(restriction -> restriction.equals(newProductRestriction))
                      .map(restriction -> product.getAmount().getNumberOfUnits()))
         .reduce(BigDecimal.ZERO, BigDecimal::add);
    BigDecimal result = restrictionsNumber.add(sum);
    
  2. # 2 楼答案

    听起来您想使用“reduce”操作。 Reduce用于对整个流求和或求最大值等操作

    (如果您希望对单个流元素进行添加,那么我不清楚您的问题,请添加详细信息)