当前位置: 首页 > 知识库问答 >
问题:

流不在for循环中工作

邢曦
2023-03-14
BigDecimal getInterest(List<Investment> investments) {
        BigDecimal interest = BigDecimal.ZERO;
        for (Investment i: investments) {
            i.getTransactions().stream()
                    .map(Transaction::getAmount)
                    .forEach(interest::add);
        }
        return interest;
    }

这个方法的问题是它总是返回零。看起来.foreach()没有使用它的参数。然而,如果我按照下面的方式来写,那么一切都运行得很好。有没有人知道为什么第一种方法不起作用?

BigDecimal getInterest(List<Investment> investments) {
        BigDecimal interest = BigDecimal.ZERO;
        for (Investment i: investments) {
            interestPaid = interest.add(i.getTransactions().stream()
                    .map(Transaction::getAmount)
                    .reduce(BigDecimal.ZERO, BigDecimal::add));
        }
        return interest;
    }

共有1个答案

令狐声
2023-03-14

BigDecimal是不可变的,因此您的Foreach正在调用Add,但没有对结果执行任何操作。在这种情况下,reduce是正确的流运算符。

如果您看到使用流对BigDecimals进行加法。您应该使用.reduce(BigDecimal.Zero,BigDecimal::Add),这将使您的循环主体:

interest = i.getTransactions().stream()
                .map(Transaction::getAmount)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
 类似资料:
  • for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目。我们会在后面的章节中更加详细地学习序列。 使用for语句 例6.3 使用for语句 #!/usr/bin/python # Filename: for.py foriinrange(1,5):     printi else:     print'The for loop is over' 输出 $ pytho

  • 问题内容: 我有以下代码- 但这给了我输出- 我不明白这一点,为什么不消除它,但是在这种情况下我只尝试了一种。当我最后添加少量内容时,我不会从中删除。为什么? 问题答案: 删除第一个“ Meg”时,即为索引。然后增加,但是由于“ Meg”之一已被删除,因此现在是“ Brain”。因此,您实际上没有检查第二个“ Meg”。 解决问题。您可以在删除元素时减少索引:

  • 问题内容: 我试图在for循环内发出几个服务器请求。我发现了[\这个问题,\并实施了建议的解决方案。但是,它似乎不起作用。 如果我删除了for循环并将所有xmlhttp [i]更改为xmlhttp,那么对于一个元素来说一切都很好,但是我无法发出多个请求。在此先感谢您的任何建议。 问题答案: 尝试下面的代码段 响应

  • 问题:我能否使用Java流API(即一行)实现方法。需要变量来定义字符串的长度;我尝试为每个循环,但它不工作。我需要一个循环的范围。 我的尝试:

  • 问题内容: 这有效: 但是,这不是: 在第二个示例中,数组未添加到自身。 问题答案: 是的,不是 您所做的可能也是有效的代码,但是现在您正在做 它适用于数字类型(我假设您有)。没有数组索引的简化示例: 样品: 输出: -5 -5 5 5 为了清晰起见,从评论中复制: 您基本上是在说。在这种情况下,仅需指示它是一个正整数即可。这是有效的代码,但这不是您想要的。