ホームページ  >  記事  >  Java  >  Java8 のラムダ式構文の概要

Java8 のラムダ式構文の概要

黄舟
黄舟オリジナル
2017-09-19 10:39:381529ブラウズ

ご存知のとおり、ラムダ式は Java 8 で提供される新機能であり、Java をサポートしており、簡単な「関数型プログラミング」も実行できます。 次の記事では、Java8 学習チュートリアルのラムダ式構文に関する関連情報を主に紹介します。必要な方は参照してください。

はじめに

Java8でラムダ式が導入されたことは皆さんご存知かと思いますが、これを使用する際には、その動作をパラメータとして使用し、外側の層を囲む不要なクラス宣言を削除します。コードをより簡潔にします。

ラムダ式の構文

ラムダ式は、パラメータ、->、関数本体の 3 つの部分で構成されます。実際、関数本体は式またはステートメントにすることができます。ステートメントは {} で囲む必要がありますが、式は囲むことができません。

ラムダ式の例


(List<String> list) -> list.isEmpty() // 布尔类型表达式
() -> new Apple(10) // 创建一个新对象
(Apple a) -> { System.out.println(a.getWeight()); } // 使用一个对象的属性
(String s) -> s.length() // 选择或提取一个对象的属性
(int a, int b) -> a * b // 组合两个参数
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比较两个对象

動作のパラメータ化

ご覧のとおり、ラムダ式は動作を表現することに重点を置いています。実際、Java8 より前には、処理動作をパラメータとして同様の例がすでに存在していました:


// java.util.Comparator
public interface Comparator<T> {
 public int compare(T o1, T o2);
}


inventory.sort(new Comparator<Apple>() {
 public int compare(Apple a1, Apple a2){
 return a1.getWeight().compareTo(a2.getWeight());
 }
});

上記の例では、Comparator インターフェイスが定義され、compare メソッドが定義されています。リスト タイプのインベントリでは、コンパレータをパラメータとして受け取る並べ替え方法が定義されます。使用すると、匿名または非匿名の Comparator オブジェクトが生成され、compare メソッドを実装し、特定の比較動作を指定して、Comparator オブジェクトをパラメータとして sort メソッドに渡します。実際の機能は、比較動作をパラメータとして sort メソッドに渡すことです。この考え方とアプローチは「動作パラメータ化」と呼ばれます。使用されるメソッド (sort メソッドなど) は複数の動作に対応でき、動作を変更する必要がある場合、その動作を表すコードのみを変更する必要があり、ユーザーは変更を加える必要がないため、ロバスト性が向上します。コード。

匿名内部クラス

上記の例のように、変数を定義せずにComparator型のオブジェクトを直接新規作成し、オブジェクトへの参照を保存することを匿名内部クラスを使って呼び出します。匿名内部クラスの場合、メソッドを再利用できないため、コードの冗長性がより明確にわかります。オブジェクトを使用するたびに手動で新しいオブジェクトを作成する必要があり、比較メソッドのシグネチャも記述する必要がありますが、実際に役立つのは比較メソッドの本体だけであるためです。 Java 8 では、ラムダ式を使用してこれらのコードを簡略化できます。たとえば、上記の sort メソッドの使用は次のように簡略化できます:


inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight() ) );

スレッドの定義の例:


Thread t = new Thread(new Runnable() {
 public void run(){
 System.out.println("Hello world");
 }
});

は次のように簡略化できます:


Thread t = new Thread(() -> System.out.println("Hello world"));

例GUI でのクリック イベントの :


Button button = new Button("Send");
button.setOnAction(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent event) {
  label.setText("Sent!!");
 }
 });

は、次のように簡略化できます:


Button button = new Button("Send");
button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));

ラムダ式がより簡潔になり、開発者が読み取りと書き込みの際に定義された動作にさらに集中できることがわかります。コード。

概要

この記事では、ラムダ式の構文、ラムダ式の使用シナリオ、ラムダ式を使用する利点を紹介します。次回の記事では、ラムダ式の定義方法と使用方法、および他の言語と比較した Java のラムダ式の特殊な仕様について説明します。

概要

以上がJava8 のラムダ式構文の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。