我在另一个循环中有一个带循环的代码,我想在那里使用流但是找不到任何解决方案。
所以这是我的代码
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.");
请给我一个线索或解决方法如何通过流来做到这一点。
提前致谢。
答案 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
。