2016-09-02 8 views
-3

ループに別のループでコードがあり、そこにストリームを使用したいが、解決策が見つからない。別のループにループを含むストリーム

だからここに私のコードは

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

だと私は、ストリームによってこれをしてください行うにはどのような手掛かりや溶液を得ました。

ありがとうございます。

答えて

2

ここではネストループは必要ありません。これは私がストリームでそれを行うだろうかです:elementListあなたが返すものの完全に独立していることを

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

注意してください。正しい通貨が見つからない場合にのみ例外をスローします。

orElseThrow

方法は、それが存在する場合Optionalの値を返し、またはそれが存在しない場合は例外をスローOptional上の方法です。 のfindFirstメソッドは、存在する場合はストリームの最初の要素を含むOptionalを返します。ストリームが空の場合は空のOptionalを返します。

+2

私はあなたに投票をしようとしていましたが、質問コードが本当に奇妙であり、正しく理解していなかったことに気づきました。 – Andreas

関連する問題