【Javaラムダ式の詳しい解説】

Java プログラミングでは、インターフェイスを実装したり、クラスを継承したりする必要がある状況によく遭遇します。ただし、このインターフェイスを実装するために完全なクラスが必要なく、単純な関数だけが必要な場合もあります。現時点では、Java 8 で導入された Lambda 式を使用できます。この記事では、ラムダ式の基本概念と利点を紹介し、具体的な例を通してラムダ式の単純さを分析します。

目次

1 はじめに

2. ラムダ式の利点

1.シンプル

2. 計算の並列化が容易

3. コードの可読性の向上

ラムダ式を使用すると、特に関数型プログラミングの初心者にとってコードを理解しやすくなります。

3. 導出

要約する


1 はじめに

まず、Lambda という名前について説明します。Lambdaは略語ではなく、ギリシャ語アルファベットの 11 番目の文字の発音ですλ, ラムダ式は、匿名関数を表現する簡潔な方法であり、関数をパラメータとして他のメソッドに渡すか、戻り値として渡すことができます。

2.ラムダ式の利点

1.シンプル

ラムダ式を使用すると、関数インターフェイス (唯一の抽象メソッドとのインターフェイス) を簡潔な方法で表現できます。これにより、完全なクラスを作成しなくても、1 行のコードで単純なメソッドを定義できるため、コードがよりクリーンになります。

2.並列コンピューティングが容易

ラムダ式を Java 8 で導入された Stream API で使用すると、コレクションの並列処理が簡単になります。データを複数の部分に分割し、異なるスレッドで操作を実行することで、マルチコア プロセッサのパフォーマンスを最大限に活用できます。

import java.util.Arrays;
import java.util.List;

public class ParallelComputingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        int sumOfSquares = numbers.parallelStream()
                .filter(n -> n % 2 == 0)
                .map(n -> n * n)
                .sum();

        System.out.println("Sum of squares of even numbers: " + sumOfSquares);
    }
}
 
 

この例では、まず 1 ~ 10 の整数のリストを作成します。次に、parallelStream() メソッドを使用して並列ストリームを作成します。次に、filter() メソッドを使用して偶数をフィルタリングし、map() メソッドを使用して各偶数の 2 乗を計算します。最後に、sum() メソッドを使用してすべての平方和を計算します。

3. コードの可読性の向上
ラムダ式を使用すると、特に関数型プログラミングの初心者にとってコードを理解しやすくなります。

3. 導出

次に、この順序でラムダ式の簡単さを体験していきます。

 

 まずインターフェースを作成します

interface lambda{
    void test();
}

 インターフェースを実装する外部クラスを作成する

class demo1 implements lambda{
    @Override
   public  void test(){
        System.out.println("hello lambda!!!");
    }
}

通話インターフェース

public class Main {
    public static void main(String[] args) {
       lambda test = new demo1();
       test.test();

    }

}

実装クラスを外部に記述するのは少し面倒なので、コードを最適化し、静的な内部クラスを使用してインターフェースを実装します。

public class Main {

   public static class demo1 implements lambda{
        @Override
        public  void test(){
            System.out.println("hello lambda!!!");
        }
    }

    public static void main(String[] args) {
       lambda test = new demo1();
       test.test();

    }

}
interface lambda{
    public void test();
}

実行結果も正しいので、次はローカル内部クラスをさらに最適化して使用していきます。

public class Main {
    
    public static void main(String[] args) {
        class demo1 implements lambda {
            @Override
            public void test() {
                System.out.println("hello lambda!!!");
            }
        }

        lambda test = new demo1();
        test.test();

    }

}
interface lambda {
    public void test();
}

コードはさらに最適化することができ、今回はクラス名も必要とせず、匿名の内部クラスを直接使用します。

public class Main {

    public static void main(String[] args) {
        lambda test = new lambda() {
            @Override
            public void test() {
                System.out.println("hello lambda!!!");
            }
        };
        test.test();

    }

}
interface lambda {
    public void test();
}

実装クラスには名前がなくなりましたが、引き続き最適化できますか? Java 8 で導入された Lambda 式は引き続き最適化でき、インターフェイス名とメソッド名は単純に破棄されます (これは非常に意図的です)。

public class Main {

    public static void main(String[] args) {
        lambda test = ()->{
                System.out.println("hello lambda!!!");
            };
        test.test();

    }

}
interface lambda {
    public void test();
}

コードははるかに単純ですか? インターフェイス名とメソッド名の代わりに ()-> を使用するだけで、実際にはコードをさらに最適化できます。

メソッド内にステートメントが 1 つだけある場合、中括弧は必要ありません。

  lambda test = ()->
                System.out.println("hello lambda!!!");
        test.test();

ラムダ式ではパラメータを渡すことができます。パラメータが 1 つだけの場合、括弧は必要ありません。

public class Main {

    public static void main(String[] args) {

        lambda test = a->
                System.out.println("hello lambda!!!");
        test.test(520);

    }

}
interface lambda {
    public void test(int a);
}

ご覧のとおり、ラムダ式を使用すると、コードがより簡潔かつ明確になり、読みやすく、保守しやすくなります。

要約する

 この記事では、Java 8 のラムダ式について、その基本概念、利点、具体的な例によるその単純さの分析などを含めて紹介します。ラムダ式を使用すると、コードを簡素化し、コードの可読性を向上させ、並列処理を容易にすることができます。この記事が Java での Lambda 式の理解と使用に役立つことを願っています。

おすすめ

転載: blog.csdn.net/weixin_55939638/article/details/134562516