【问题标题】:Streams with loop in another loop在另一个循环中循环流
【发布时间】:2016-09-02 08:47:21
【问题描述】:

我在另一个循环中有一个带有循环的代码,我想在那里使用流但找不到任何解决方案。

这是我的代码

for (WebElement currency : elementList) {
            for (WebElement amount : amountList) {
                if (currency.getText()
                            .contains(currencyType) && amount.getText()
                                                             .contains(amountInCards)) {
                    return amount;
                }
            }
        }
throw new NoSuchElementException("No element found.");

请给我一个线索或解决方案如何通过流来做到这一点。

提前致谢。

【问题讨论】:

    标签: java lambda java-8 java-stream


    【解决方案1】:

    这里不需要嵌套循环。这就是我对流的处理方式:

    if (elementList.stream().noneMatch(c-> c.getText().contains(currencyType))) {
        throw new NoSuchElementException("No element found.");
    }
    
    return amountList.stream()
              .filter(amount -> amount.getText().contains(amountInCards))
              .findFirst()
              .orElseThrow(() -> new NoSuchElementException("No element found."));
    

    请注意,elementList 完全独立于您返回的内容。如果您找不到正确的货币,它只会引发异常。

    orElseThrow 方法是Optional 上的一个方法,如果存在则返回Optional 的值,如果不存在则抛出异常。 Stream 上的 findFirst 方法返回一个 Optional,如果它存在,则包含流的第一个元素,如果流为空,则返回一个空的 Optional

    【讨论】:

    • 我本来打算对你投反对票,但我意识到问题代码真的很奇怪,而且你正确解开了它,所以....干得好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2014-03-21
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多