2017-05-20 12 views
1

今日私は私が参照できない例外ラムダ式のローカル変数 私は値ペアはHashMapのラムダ式から参照されるローカル変数を反復している間にローカル変数を参照することは最終的であるか効果的な最終エラーでなければなりません

public void METHOD_NAME(Value value1, Value value2) { 
    boolean founded = false; 
    //values is the name of the HashMap 
    this.values.forEach((value1Map, value2Map) -> { 
      if(value1Map == value1&&value2Map == value2){ 
       this.doSomeStuff(); 
       founded = true; 
      } 

    }); 

} 

とにすでに存在する場合、私は二つの値と第方法のチェックを与える方法を持っているときに、彼はそれを見つけたdoesent場合、私は知る必要ブール値を読み出したい仕上げ found = false; このラムダにはどのように設立できますか?これを行うには他の方法がありますか?

+1

の代わりに==と比較するかどうかを確認する必要があります。find - > found ... "found"は異なる意味を持ちます。 – Tom

+0

[This](https://www.google.co.il/search?q=local+variables+referenced+from+a+lambda+expression+must+be+final+or+effectively+final&gws_rd=cr&ei=5S8gWcehKKnAgAbBioDQDQ )助けてください。 – user1803551

答えて

0

ラムダのプリミティブのアトミックバリアントを使用できます。この

final AtomicBoolean found = new AtomicBoolean(false); 

とところで、この

found.set(true); 

のようなあなたのラムダの中にそれを設定することにより、

boolean founded = true 

を交換し、ラムダによって反復ごとに交換することはありません、絶対に大丈夫です。 forループはまだ動作し、場合によってはラムダよりも利点があります。トムはあなたの質問のコメントで示されているように

私はに設立を変更したがを見つけました。さらに、equals

+0

早速解答してくれてありがとうございました。ありがとうございました;)Iveはラムダを使用しました。なぜなら、HashMapを使ってそれを繰り返すほうが簡単だと思ったからです。 –

+0

ようこそ。あなたの場合は、Forループの方がAtomicBooleanの回避策のほうが好きで、forEach以外の方法でストリームAPIの他のメソッドを呼び出さないためです。最終的にそれは個人的な好みです。私の答えを容認された解決策にすることを検討してください。ありがとう – Matt

関連する問題