2017-12-11 5 views
-2

結果に対してブール値を返そうとしています。Javaストリームマップを使用してbooleanを返す方法

public boolean status(List<String> myArray) { 
     boolean statusOk = false; 
     myArray.stream().forEach(item -> { 
     helpFunction(item).map (x -> { 
       statusOk = x.status(); // x.status() returns a boolean 
       if (x.status()) { 
        return true; 
       } 
       return false; 
      }); 
     }); 
} 

ラムダ式で使用される不平な変数は、最終的にまたは効果的に最終的なものでなければなりません。 statusOkを割り当てると、ループ内に割り当てることができませんでした。 stream()とmap()を使用してboolean変数を返すにはどうすればよいですか?

+0

ここラムダのを使用してのポイントは何ですか?なぜあなたの代わりに 'map()'を使うのでしょうか? 'anyMatch()'? –

+0

このような状況でlambdaを使用する方法については、この質問をご覧ください:https://stackoverflow.com/questions/32268784/java8-effectively-final-compile-time-error-on-ninal-final-variable可能な重複。 – tkruse

+0

そのためには、内側のラムダを 'x :: status'や適切な記法が何であれ作るのが間違っていますか? –

答えて

3

あなたはhelpFunction(item)は、そのいくつかのクラスのいくつかのインスタンスを返すように見えます代わりにanyMatchを呼び出す

public boolean status(List<String> myArray) { 
     return myArray.stream().anyMatch(item -> here the logic related to x.status()); 
} 
3

、ストリーム上のforeachを行う必要がいけない...

をストリーム間違っを使用していますboolean status()メソッドがあり、Streamの任意の要素に対してhelpFunction(item).status()trueの場合は、メソッドがtrueを返すようにします。

あなたはanyMatchで、このロジックを実装することができます

public boolean status(List<String> myArray) { 
    return myArray.stream() 
        .anyMatch(item -> helpFunction(item).status()); 
} 
関連する問題