より少ないリソースでより多くのことを行う: Java 8 ラムダ式

ラムダ式を使用すると、Java コードが読みやすく、強力で、読みやすくなります。

プログラミング言語の欠点の 1 つは、特定の処理を実行するために記述される命令の数であり、大量のコードを記述しなければならない場合があります。ラムダ式は、いくつかのケースでこの問題を解決し、C#が何年も前からそうであったように、Javaをより強力かつ簡単にします.

ラムダ式はJava SE 8の新機能であり、これらはこのリリースに追加された最も注目すべき機能です。ラムダ式は、これらの式を使用するメソッドとインターフェイスをより明確に表現する方法を提供します。また、ラムダ式は、リストの参照、コレクションからのデータのフィルタリングと抽出を容易にすることで、Javaオブジェクトコレクションを改善します。パフォーマンス機能は、すべての新しい最新のコンピュータで利用可能なマルチタスク環境でJavaを強化します。

プログラマは、ラムダ式が関数型プログラミングの概念でJavaのオブジェクト指向の性質を汚染することを恐れています。実際、これらは数年前に C# 言語に影響を与えたのと同じ批判ですが、以前よりは改善されています

Lambda 式と VisualBasic.Net

Lambda 式は、主に LINQ (統合言語クエリ) をサポートするために、C# と VB.Net に追加されました。ラムダ式は、ツリーのような式を作成するために使用できる匿名関数です。C# では、ラムダ式を作成するには、サイド ラムダ演算子 => の左側に入力し、式または命令のブロックを反対側に配置します。たとえば、式 x=>x*x は x という名前のパラメーターを指定し、x の 2 乗を返します VB.Net。この場合、無名関数を使用して lambda.

LINQ は、Visual Studio 2008 でも導入された一連の機能で、クエリを作成する機能を追加できるようになりました。LINQは、SQLデータベース、XMLドキュメント、ADO.Net データセット、.Netコレクション、ファイル、文字列などのクエリに役立ちます。LINQ、およびラムダ式は、C# コミュニティで人気が高まっています。したがって、Java.

Javaの匿名内部クラス

Javaの匿名内部クラスは、ラムダ式への第一歩でした。次の例に示すように、内部クラスを呼び出すことで使用できます

JButton button = new JButton("test");
button.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
System.out.println("ワンクリック");
}
});
内部クラス ActionListener ボタンに追加されるのは、メソッド actionPerformed() をその中に含めます。これにより、コードが少し節約されますが、それほど多くはありません.

1つのメソッドのみを定義するインターフェイスは、Java 8では関数型インターフェイスと呼ばれます。ラムダ式は、関数型インターフェイスや内部クラスでよく使用されます.

Javaでのラムダ式の構文

Javaのラムダ演算子は->です。C# と同様に、Java 8 は次の例に示すように引数をアタッチします

(int x) ->x * x
変数を宣言しました x で、この変数の 2 乗を返します x.

次の3つのラムダ式を考えてみましょう:

(int x, int y) ->x + y 

() ->36

(文字列) ->{ System.out.println(s); }
ここで、例ActionListener lambda:

JButton button = new JButton("test");
testButton.addActionListener(e ->System.out.println("ワンクリック"));
このコードが小さく、読みやすくなっていることは明らかです。また、内部クラス ActionListener が引数 e.

java.util.functionjava.util.function は Java 8 で追加され、5 種類の関数型インタフェースが含まれています><<。>
  • Predicate: パラメータとして渡されたオブジェクトのプロパティ.
  • Consumer: 渡されたオブジェクトを引数としてトリガーするアクション.
  • Function: 1 つの結果をレンダリングします Y:  X->Y
  • Provider: X-> の X
  • <>単項演算子のインスタンスが含まれます。x
  • (X, X)->の二項演算子x
  • lambda式の>オブジェクトコレクションは、Javaでのコレクションの使用を改善できます。異なるバージョンでは、forEach が両方のインターフェイスで設定 Iterator および Iterable.

    例:
    List には生徒のリストが含まれ、このクラスは student.

    List and = Student.createShortList();
    List.

    Predicate list = および ->et.getAge() >= 20;
    最後に、選択範囲で何かをすることができます:

    aClass.doqlqthing(pl, list);
    これは、以前のバージョンのJavaよりもはるかに高速です。より複雑な処理を行いたい場合は、 forEach():

    et.forEach( e -> e.getName() );
    結論として、Java言語に追加された機能は、そのオブジェクト指向の概念を少しも弱めることはありません。これらの機能により、言語は強力で、豊かで、エレガントになります。

    References: