ホームページ  >  記事  >  Java  >  Java のラムダ式を理解する方法

Java のラムダ式を理解する方法

WBOY
WBOY転載
2022-06-02 11:53:082023ブラウズ

この記事では、java に関する関連知識を提供します。主にラムダ式に関連する問題を紹介します。ラムダ式は、JDK8 の開始後の新しい構文形式であり、匿名内部クラスのコード作成を簡素化できます。 . 見てみましょう。皆さんの参考になれば幸いです。

Java のラムダ式を理解する方法

# 推奨学習: 「

Java ビデオ チュートリアル#Lambda の概要

ラムダ式は、JDK8 開始後の新しい構文形式です。

##関数:

匿名内部クラスのコード記述を簡素化します #形式:

(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码
}
注:->是语法形式,无实际意义

最初に抽象クラスを定義し、匿名の内部クラスを介してそのメソッドを書き直してから、それを単純化し、2 つの変更点を比較します。

ラムダ式使用前:

public static void main (String[] args){
    People p = new People(){
    @Override
    public void run(){
        System.out.println("小学生跑的很慢");
        }
    };
    p.run();    

}
abstract class People{
    public abstract void run();
}

ラムダ式使用後:

People p = ()->{
    System.out.println("小学生跑的很慢");
};
//会出现报错

エラーが表示されますが、これはなぜですか?その理由は、ラムダ式の以前の定義が明確ではないためです。ラムダ式は、すべての匿名内部クラスを簡素化することはできません。 関数型インターフェイスの匿名内部クラスの記述形式を簡素化できるだけであり、それは 1 つだけです。は抽象メソッド

です。通常、インターフェイスに @Functionalinterface アノテーションを追加して、インターフェイスが関数インターフェイスを満たす必要があることをマークします。 ラムダ式によって非常に簡素化されました:

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法
interface People{
    void run();
}
//简化之前的匿名内部类
People p = new People(){
    @Override
    public void run(){
        System.out.println("小学生跑的很慢!");
    }
};
//简化之后
People p = () -> {
        System.out.println("小学生跑的很慢!");
};

さらに、使用するメソッドに パラメータとして代入することもできます:

//在原来的基础上定义一个pk方法
public static void pk(People p){
    System.out.println("跑步情况如何:")
    p.run();
}
//不使用Lambda的情况下:
pk(p);//需要在定义匿名内部类之后,将p代入;
//使用Lambda的情况:
People p = () -> {
        System.out.println("小学生跑的很慢!");
};
pk(() -> {
        System.out.println("小学生跑的很慢!");
});
//由于等号右边即是People创建的对象p,因此可以可以直接将其代入

Lambda の利点:

Lambda は匿名関数であり、Lambda 式を渡すことができるコードの一部として理解でき、さらに多くの内容を記述できます。より簡潔で柔軟なコードは、よりコンパクトなコーディングスタイルとして、Java 言語の表現能力を向上させます。

Lambda の実際的な役割

これまでの学習プロセスでは、配列を昇順または降順に並べ替えるソート方法など、配列に関する関連知識を学習しました。 )、実際にはインターフェイス クラスであり、抽象メソッドが 1 つだけあります:
//精简之前:
Arrays.sort(grade,new Comparator<Integer>(){
    @Override
    public int compare(Integer o1,Integer o2){
        return o2 -o1;
}
});
//精简之后:
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});

ラムダ式の省略ルール

パラメータの型は省略可能です

//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//省略参数类型之后
Arrays.sort(grade,( o1, o2){
        return o2 -o1;
});
  • パラメータが 1 つの場合はパラメータの型を省略でき、() も省略できます
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionListener((ActionEvent e) -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
  • ラムダ式のメソッド本体コードが 1 つだけの場合コード行。 Lambda 式のメソッド本体コードのコードが 1 行のみの場合は、中かっこを省略し、セミコロン
//参照上一条规则的例子
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> System.out.println("我是简单的例子。") );
  • を省略できます。中括弧は省略できます。このとき、このコード行が return 文の場合は return を省略し、「;」も省略する必要があります。

以上がJava のラムダ式を理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。