PHP程序员小白到大牛集训(12期免息)
Apifox=Postman + Swagger + Mock + JMeter,是接口文档,接口调试,接口 Mock,接口自动化测试一体化协作平台, php中文网推荐使用
广告
作者信息

长期闲置

长风破浪会有时,直挂云帆济沧海。

最近文章
linux文件的大小能限制吗1045
linux的make命令找不到怎么解决324
linux中i节点是什么562
视频教程分类
推荐视频教程
  • php程序员小白到大牛三个月集训php程序员小白到大牛三个月集训
  • Laravel 9 学习正当时—保姆级教程,想学不会都难!Laravel 9 学习正当时—保姆级教程,想学不会都难!
  • 千万级数据并发解决方案(理论+实战)千万级数据并发解决方案(理论+实战)
  • Laravel基础与实战(模块化)Laravel基础与实战(模块化)
  • 首页 >Java >java教程 > 正文

    怎么理解Java中的lambda表达式

    转载2022-06-02 21:10:241110 关注公众号:每天精选资源文章推送
    本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于lambda表达式的相关问题,Lambda表达式是JDK8开始后的一种新语法形式,能够简化匿名内部类的代码写法,下面一起来看一下,希望对大家有帮助。


    推荐学习:《java视频教程

    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 Comparator<Integer>(){
        @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视频教程

    以上就是怎么理解Java中的lambda表达式的详细内容,更多请关注php中文网其它相关文章!

    20期PHP线上班

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除

  • 相关标签:java
  • 相关文章

    相关视频


    专题推荐