伝統的なインターフェース機能を実装してコントラストを説明するためのラムダ式

この数には、私はラムダ式の構文を使用する前に書かれたいくつかの記事では、一部の読者は、コードを読み取ることができないことを報告しています。私は、java 13は、ラムダ式を使用することはありませんjava8の使用だけでなく、実際には、まだjava8を使用していないプログラマがたくさんあり、私たちが習得している必要があり、ラムダ式の最も重要な特徴のjavaの8出てきたと思いました。だから、この書き込みは、依然として必要であるあなたは、あなたに私の記事が参考に考えるあなたの注意を楽しみにしている場合

ラムダ式は、Java 8つの最も人気があり、一般的に使用される機能です。これは、関数型プログラミングの利点は、それが私たちは非常に使いやすい、コードの多くを救うことができるということです、非常に私たちの符号化効率を向上させることができ、関数型プログラミングのJavaの概念を紹介します。この記事では、我々はラムダ式が何であるかを説明し、書かれたラムダ式のために書かれた伝統的なJavaコードを変換します、我々は、レガシーコードを簡素化するために行われていたものに例のラムダ式によって理解することができます。

まず、インタフェース定義

まず第一に、我々は、式中のどのようなラムダ式を理解する必要がありますか?答えは、インターフェース機能のラムダ式の表現の実装ですので、我々はいくつかの準備作業を行う必要があります。従来の開発方法では、使用されていない我々は、機能ブロックに渡されます。私たちの行動のコード定義の全てをオブジェクト参照によってインビボでカプセル化され、そして実行され、同じように次のコードを使用します。


public class LambdaDemo {
    //函数定义
    public void printSomething(String something) {
        System.out.println(something);
    }
    //通过创建对象调用函数
    public static void main(String[] args) {
        LambdaDemo demo = new LambdaDemo();
        String something = "I am learning Lambda";
        demo.printSomething(something);
    }
}

我々は、古典的なOOPスタイルの実現である上記のコードの開発のための奇妙な方法を感じるべきではありません。機能インタフェース、および抽象メソッドを定義するためのインタフェースを作成し、のは、上記のコードの変更をやってみましょう。


public class LambdaDemo {
    //抽象功能接口
    interface Printer {
        void print(String val);
    }
    //通过参数传递功能接口
    public void printSomething(String something, Printer printer) {
        printer.print(something);
    }
}

第二に、従来のインタフェース機能の実装

プリンタインタフェースが責任印刷動作で上記の実装では、コンソールは、他のアクションとすることができる印刷、印刷することができます。方法はprintSomethingもはや振る舞いを定義していないが、行うプリンタの動作が定義され、この設計は、より柔軟性があります。コードは以下の通りであります:


public static void main(String[] args) {
    LambdaDemo demo = new LambdaDemo();
    String something = "I am using a Functional interface";
    //实现Printer接口
    Printer printer = new Printer() {
        @Override
        public void print(String val) {
            //控制台打印
            System.out.println(val);
        }
    };
    demo.printSomething(something, printer);
}

ここまでは、ラムダ式を使用していません。私たちは具体的な実現のプリンタインターフェイスを作成し、それを渡すprintSomethingする方法。

三、ラムダ式の実装

言うべきコンセプトペーパーのラムダ式の後、のは、ラムダ式の構文を学びましょう:

(param1,param2,param3 ...,paramN)-  > {   //代码块;  }
  • まず、我々はそのラムダ式を知って、式はインタフェースの関数であり、
  • 左矢印は、フォームの関数の引数のカンマ区切りリストです
  • これは、関数本体右矢印です

今、私たちは、コードの最初のセクション再構築ラムダ式を使用します


public static void main(String[] args) {
    LambdaDemo demo = new LambdaDemo();
    String something = "I am learning Lambda";
    //实现Printer接口(请关注下面这行lambda表达式代码)
    Printer printer = (String toPrint)->{System.out.println(toPrint);};
    //调用接口打印
    demo.printSomething(something, printer);
}

ラムダ式は、我々のコードより簡潔にします。実際にはパフォーマンスの面でラムダ式を使用すると、マルチコアプロセッシングの多くのより多くの利点がありますが、ご理解java8は(この記事の数が記述されている前に)この議論の範囲外で、そのため、理にかなっているAPIをStreamsの後にのみ。

従来のJavaコードのコントラストの実装は、符号量は多くを低下させませんか?しかし、これはまだ最も単純な実装ではありません、私たちは一歩一歩。


Printer printer = (String toPrint)->{System.out.println(toPrint);};
//简化:去掉参数类型
Printer printer = (toPrint)->{System.out.println(toPrint);};
//简化:去掉参数括号
Printer printer = toPrint->{System.out.println(toPrint);};
//简化:去掉函数体花括号
Printer printer = toPrint->System.out.println(toPrint);
  • でも、指定されたパラメータの種類は、矢印を残していない、コンパイラは、仮パラメータ・インタフェース・メソッドの種類から推測されます
  • 唯一の1つのパラメータが、我々は完全に括弧ときのパラメータは省略することができます
  • 関数の本体は一行だけであるとき、私たちは関数本体の中括弧を省略することができます

我々はパラメータなしでインターフェイスメソッドを定義する場合は、空の括弧で置き換えることができます。

()->  System.out.println("anything you wan to print")

そこで、我々は、コードの完成を簡素化し、ラムダ式で終わる好きなのですか?本当の色:


public static void main(String[] args) {
    LambdaDemo demo = new LambdaDemo();
    String something="I am Lambda";
    //关注下面的这行代码
    demo.printSomething(something, toPrint -> System.out.println(toPrint));
}

我々は、ラムダ式パラメータ内の関数呼び出し、わずか3行のmainメソッドへのコードの9行の最初の減少として一緒に使用されます。しかし、私が言いたい、これはラムダ式はコードを簡素化する究極の方法を完了することができないままで、あなたはラムダ式の使用と併せてjava8ストリームAPIを学ぶとき、あなたは大幅に符号化効率を向上させるだろうことがわかります!

結論

ラムダ式の表現は、インタフェースの関数であり、左の矢印は、パラメータの関数である、右の矢印は、その機能です。種類及び機能の戻り型を省略することができるパラメータ、プログラムが自動的にインターフェイスによって定義されたコンテキストに基づいてデータ・タイプを決定します。

この記事では、我々は詳細に紹介されているJavaのラムダ式であり、インタフェースの効率と品質を向上させるためにそれらを使用する方法を学びます。よりラムダのためのコレクションのストリームAPIフレームワークが提供する多くの利点と組み合わせて使用​​したコンテンツ、約この番号に注意してください。

あなたの注意を楽しみにして

おすすめ

転載: www.cnblogs.com/zimug/p/11817433.html