ラムダ式のパラメータの受け渡し

変数を使用してラムダ式は、これらのルールに従う必要があります:

 

図1は、唯一の外側のローカル変数ローカル変数の定義は、ラムダの域外適用内で変更することができないことを意味し、最終的なマーク、そうでない場合、コンパイルエラーを参照することができます。
図2は、finalとして宣言されたローカル変数(すなわち、最終的な暗黙の意味を有する)ではないかもしれないが、後のコードに変更してはならない
パラメータ3、同じ名前またはローカル変数とローカル変数を宣言することを許可しました。
次のコードは、コンパイラが文句を言うだろう:

パブリック 静的 ボイドメイン(文字列引数[]){ 
    リストの<string> DEST = 新規のArrayList <> (); 
    一覧 <文字列> SRC = 新しい ArrayListを<>(は、Arrays.asList( "01"、 "02"、 "03" )); 
    src.forEach(項目 - > { 
        追加(DEST、項目); 
    }); 
    DEST = nullを

}

第ルール違反ので(ローカル変数がfinalとして宣言することはできないが、(コードで後で変更してはならない、すなわち、劣性セマンティック決勝を有します))

少しDESTへの変更を削除するように変更、あなたがコンパイルできます。

パブリック 静的 ボイドメイン(文字列引数[]){ 
    リストの<string> DEST = 新規のArrayList <> (); 
    一覧 <文字列> SRC = 新しい ArrayListを<>(は、Arrays.asList( "01"、 "02"、 "03" )); 
    src.forEach(項目 - > { 
        追加(DEST、項目); 
    }); 

}

ラムダ式では、ローカル変数がスレッドに渡され、関連する操作を実行します。

    パブリック 静的 ボイドメイン(文字列引数[]){ 
        リストの<string> DEST = 新規のArrayList <> (); 
        一覧 <文字列> SRC = 新しい ArrayListを<>(は、Arrays.asList( "01"、 "02"、 "03" ));
        新しいスレッド(() - >を追加(destが、 "A" 。)))(スタート。
        してみてください{ 
            のThread.sleep( 1000 ); 
        } キャッチ(InterruptedExceptionある電子){ 
            e.printStackTrace(); 
        } 
        のSystem.out.println(dest.size())。


      L、文字列の項目){ 
        l.add(アイテム)
        System.out.println(アイテム)
    }

 

おすすめ

転載: www.cnblogs.com/shuhe-nd/p/11532218.html