JDK8 が出てきてから長い時間が経ちましたが、最初に出たときに少しだけ知って、その後捨ててしまいましたが、今また手に取っています。今はJDK11ですが。
この記事は継続更新モードになります。
Java8 の新機能では、次のように記述できます:
public static void main(String[] args) { Supplier<Integer> supplier = ()->1; Consumer<String> consumer = (a)-> System.out.println(a); System.out.println(supplier.get()); consumer.accept("test"); }
出力:
1 test Process finished with exit code 0
とてもおしゃれです。このような簡潔なコード、できますか?つまり、Java7
まず写真を盗んでLambdaを説明します
つまり、Lambda式対応するインターフェイスの実装を作成してから、値を割り当てるときに変数への変換にはコンパイラーを使用しますか?次のようにコンパイルされたコードを確認します。
public static void main(String[] args) { Supplier<Integer> supplier = () -> { return 1; }; Consumer<String> consumer = (a) -> { System.out.println(a); }; System.out.println(supplier.get()); consumer.accept("test"); }
コンパイラーはこの機能を実行しないため、JVM が Lambda 関数を実装している可能性があります。これについては後ほど詳しく説明します。 Mark 1
ここに書くと、ラムダ式によってコード量が削減されることがわかります。Java 8 より前では、この機能を実現するには、匿名の内部クラスを使用するか、インターフェイスを実装するクラスを作成するしかありませんでした。以下の通り
Supplier<Integer> supplier = new Supplier<Integer>() { @Override public Integer get() { return 1; } };
実際には、Lambdaに付随するインターフェースの方が気になります
@FunctionalInterface public interface Supplier<T> { /** * Gets a result. * * @return a result */ T get(); }
これで、FunctionalInterfaceを使用して、どのインターフェースがJDK8の関数インターフェースであるかを確認できます
そのうちの 1 つを選択してください。最も人気のあるもののうち 2 つは、テストして学習するためにここにあります
ああ、記事を読んで非常に重要な段落を見つけたので、話を中断させてください (実際には、関数型インターフェイスは非常に壊れやすいです:開発者がインターフェイスに関数を追加すると、そのインターフェイスは機能インターフェイスではなくなり、コンパイル エラーが発生します。コード レベルでこの脆弱性を克服し、インターフェイスが機能インターフェイスであることを明示的に示すために、Java 8 は特別なインターフェイスを提供します。注釈)
私が選択したのは、ArrayList と Optional の 2 つのクラスで、どちらも非常によく使用されるクラスです。
関連記事:
関連動画:
以上がJava のラムダ式の理解をテストして学習しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。