在另一个循环中循环流

时间:2016-09-02 08:47:21

标签: java lambda java-8 java-stream

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

所以这是我的代码

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.");

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

这里不需要嵌套循环。这就是我用流做的方式:

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的值,如果不存在则抛出异常。 findFirst上的Stream方法返回Optional,其中包含流的第一个元素(如果存在),如果流为空,则返回空Optional