首页后端开发其他后端知识Java lambda表达式的用法和注意事项是什么

Java lambda表达式的用法和注意事项是什么

时间2024-03-25 21:50:03发布访客分类其他后端知识浏览983
导读:今天这篇给大家分享的知识是“Java lambda表达式的用法和注意事项是什么”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“Java lambda表达式的用法和注意事项是什么”文章能帮助大家解决问...
今天这篇给大家分享的知识是“Java lambda表达式的用法和注意事项是什么”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“Java lambda表达式的用法和注意事项是什么”文章能帮助大家解决问题。


     

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于lambda表达式的相关问题,Lambda表达式是JDK8开始后的一种新语法形式,能够简化匿名内部类的代码写法,下面一起来看一下,希望对大家有帮助。

Lambda概述

Lambda表达式是JDK8开始后的一种新语法形式

作用:简化匿名内部类的代码写法

格式:

(匿名内部类被重写方法的形参列表)->
{

    被重写方法的方法体代码
}
    
注:->
是语法形式,无实际意义

首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:

使用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();

}
    

使用Lambda表达式之后:

People p = ()->
{
    
    System.out.println("小学生跑的很慢");

}
    ;

//会出现报错

会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。

真正意义上通过Lambda表达式简化:

@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实战的作用

在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:

//精简之前:
Arrays.sort(grade,new ComparatorInteger>
(){

    @Override
    public int compare(Integer o1,Integer o2){
    
        return o2 -o1;

}

}
    );
    
//精简之后:
Arrays.sort(grade,(Integer o1,Integer o2) ->
 {
    
        return o2 -o1;

}
    );
    

Lambda表达式省略规则

  • 参数类型可以省略不写
//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) ->
 {
    
        return o2 -o1;

}
    );

//省略参数类型之后
Arrays.sort(grade,( o1, o2){
    
        return o2 -o1;

}
    );
    
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionListener((ActionEvent e) ->
 {
    
    System.out.println("我是简单的例子。");

}
    );
    
//简化之后:
btn.addActionListener( e ->
 {
    
    System.out.println("我是简单的例子。");

}
    );
    
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子
btn.addActionListener( e ->
 {
    
    System.out.println("我是简单的例子。");

}
    );
    
//简化之后:
btn.addActionListener( e ->
     System.out.println("我是简单的例子。") );
    
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略"; "不写
//参照第一条规则的代码
Arrays.sort(grade,(Integer o1,Integer o2) ->
 {
    
        return o2 -o1;

}
    );
    
//简化之后:
Arrays.sort(grade,( o1, o2)->
     o2 -o1);
    

以上就是关于“Java lambda表达式的用法和注意事项是什么”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Java lambda表达式的用法和注意事项是什么
本文地址: https://pptw.com/jishu/653060.html
一文看懂PHP垃圾回收机制的示例及过程 用PHP怎样实现文件上传验证的功能,代码是什么?

游客 回复需填写必要信息