Rumah > Java > javaTutorial > teks badan

Bagaimana untuk memahami ungkapan lambda dalam Java

WBOY
Lepaskan: 2022-06-02 21:10:24
ke hadapan
2099 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang java, yang terutamanya memperkenalkan isu yang berkaitan dengan ungkapan lambda ialah bentuk sintaks baharu selepas permulaan JDK8, yang boleh Memudahkan penulisan kod kelas dalaman tanpa nama. Mari kita lihat. Saya harap ia akan membantu semua orang.

Bagaimana untuk memahami ungkapan lambda dalam Java

Pembelajaran yang disyorkan: "tutorial video java"

Gambaran keseluruhan Lambda

Ungkapan Lambda ialah bentuk sintaks baharu selepas permulaan JDK8

Fungsi: Permudahkan penulisan kod kelas dalaman tanpa nama

Format:

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

Mula-mula kita tentukan kelas abstrak, tulis semula kaedahnya melalui kelas dalaman tanpa nama, kemudian permudahkan dan bandingkan perubahan antara kedua-duanya:

Sebelum menggunakan ungkapan Lambda:

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();
}
Salin selepas log masuk

Selepas menggunakan ungkapan Lambda:

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

Ralat akan muncul, ini Mengapa? Sebabnya ialah takrifan ungkapan Lambda sebelum ini tidak dapat memudahkan semua kelas dalaman tanpa nama Ia hanya boleh memudahkan bentuk penulisan kelas dalaman tanpa nama dalam antara muka berfungsi, dan terdapat dan hanya Terdapat. ialah kaedah abstrak Biasanya, kami akan menambah anotasi @Functionalinterface pada antara muka untuk menandakan bahawa antara muka mesti memenuhi antara muka berfungsi.

Benar-benar dipermudahkan oleh ungkapan Lambda:

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

Selain itu, anda juga boleh menggantikannya ke dalam kaedah sebagai parameter:

//在原来的基础上定义一个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,因此可以可以直接将其代入
Salin selepas log masuk

Faedah Lambda:

Lambda ialah fungsi tanpa nama Kami boleh memahami ungkapan Lambda sebagai sekeping kod yang boleh dihantar kepada anda boleh menulis kod yang lebih ringkas dan lebih fleksibel Sebagai gaya pengekodan yang lebih padat, keupayaan ekspresi bahasa Java telah dipertingkatkan.

Peranan praktikal Lambda

Dalam proses pembelajaran sebelum ini, kami telah mempelajari pengetahuan berkaitan Tatasusunan, antaranya terdapat kaedah isihan (yang boleh menyusun tatasusunan dalam menaik atau tertib menurun), Ia sebenarnya ialah kelas antara muka dan hanya mempunyai satu kaedah abstrak:

//精简之前:
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;
});
Salin selepas log masuk

Peraturan peninggalan ungkapan Lambda

  • Jenis parameter boleh ditinggalkan
//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//省略参数类型之后
Arrays.sort(grade,( o1, o2){
        return o2 -o1;
});
Salin selepas log masuk
  • Jika terdapat hanya satu parameter, jenis parameter boleh ditinggalkan dan () juga boleh diabaikan
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionListener((ActionEvent e) -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
Salin selepas log masuk
  • Jika kaedah kod badan ungkapan Lambda hanya mempunyai satu baris kod. Anda boleh meninggalkan pendakap kerinting dan meninggalkan koma bernoktah
//参照上一条规则的例子
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> System.out.println("我是简单的例子。") );
Salin selepas log masuk
  • jika kod badan kaedah bagi ungkapan Lambda hanya mempunyai satu baris kod. Anda boleh meninggalkan pendakap kerinting. Pada masa ini, jika baris kod ini ialah pernyataan pulangan, pulangan mesti ditinggalkan dan ";" mesti ditinggalkan
//参照第一条规则的代码
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//简化之后:
Arrays.sort(grade,( o1, o2)-> o2 -o1);
Salin selepas log masuk

Pembelajaran yang disyorkan: "tutorial video java》

Atas ialah kandungan terperinci Bagaimana untuk memahami ungkapan lambda dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan