Java中Lambda表达式基础及使用

 更新时间:2021年08月25日 17:16:03   作者:季沐测试笔记  
这篇文章主要介绍了Lambda 是JDK 8 的重要新特性。它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅,感兴趣的小伙伴一起来学习吧

标准格式:

三要素:形式参数 箭头 代码块
格式:(形式参数)->{代码块}
形式参数:如果多个参数用逗号隔开,无参留空
->:英文中划线和大于号组成
代码块:具体要做的事

使用前提:

有一个接口
接口中有且仅有一个抽象方法

一、举例说明

1、无参无返回

1.1 定义一个接口

public interface Eatable {
    void eat();
}

1.2接口实现类

public class EatableImpl implements Eatable{
    @Override
    public void eat() {
        System.out.println("一天一苹果");
    }
}

1.3 测试类

public class EatableDemo {
    public static void main(String[] args) {
        //主方法调用useEatable
        Eatable e = new EatableImpl();
        useEatable(e);
        //匿名内部类
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("一天一苹果");
            }
        });

        //lambda表达式
        useEatable(() -> {
            System.out.println("一天一苹果");
        });

 

    }

    private static void useEatable(Eatable e){
        e.eat();
    }
}

2、有参无返回代码示例

public interface Eatable {
    void eat(String name);
}

public class EatDemo {
    public static void main(String[] args) {
        useEat((String name) -> {
            System.out.println(name);
            System.out.println("输出的啥");
        });
    }

    private static void useEat(Eatable e){
        e.eat("苹果");
    }

}

3、有参有返回

public interface Addable {
    int add(int x,int y);
}
1.
2.
3.
public class AddableDemo {
    public static void main(String[] args) {
        useAddable( (int x,int y ) -> {
            return x+y;
        });
    }

    private static void useAddable(Addable a){
        int sum = a.add(5, 7);
        System.out.println(sum);
    }

}

二、简单事项

1、省略模式

  • 参数的类型可省略,多个参数时候不可只省略一个;
  • 如果参数有且仅有一个可省略大括号和分号;
  • 如果代码块的语句只有一条,可省略大括号和分号(有return时return也省略掉)

2、注意事项

  • 必须要有接口,接口中有且仅有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda对应的接口:局部变量的赋值、调用方法的参数

三、Lambda表达式和匿名内部类的区别

1、所需类型不同:

  • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  • Lambda表达式:只能是接口

2、使用限制不同:

  • 如果接口中有且仅有一个抽象类,两者都可以使用
  • 接口中多于一个抽象类,只能使用匿名内部类

3、实现原理不同:

  • 匿名内部类:编译之后,产生一个单独的.class字节码文件
  • Lambda表达式:编译之后,没有单独的.class字节码文件,对应的字节码会在运行时动态的生成

到此这篇关于Java中Lambda表达式基础及使用的文章就介绍到这了,更多相关Java中Lambda表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Spring Bean的基本配置

    浅谈Spring Bean的基本配置

    这篇文章主要介绍了浅谈Spring Bean的基本配置,文中有非常详细的代码示例,对正在学习java Spring的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java 对象在 JVM 中的内存布局超详细解说

    Java 对象在 JVM 中的内存布局超详细解说

    这篇文章主要介绍了Java 对象在 JVM 中的内存布局超详细解说,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • SpringBoot整合Dubbo zookeeper过程解析

    SpringBoot整合Dubbo zookeeper过程解析

    这篇文章主要介绍了SpringBoot整合Dubbo zookeeper过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • dubbo3 filter(过滤器)如何自定义过滤器

    dubbo3 filter(过滤器)如何自定义过滤器

    dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进行预处理工作,完成限流和监控,在dubbo中,过滤器运行在consumer和provider两端,分别在调用链中执行
    2025-03-03
  • JSON字符串转成java的Map对象详细步骤

    JSON字符串转成java的Map对象详细步骤

    这篇文章主要介绍了如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Java冒泡排序及优化介绍

    Java冒泡排序及优化介绍

    大家好,本篇文章主要讲的是Java冒泡排序及优化介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 浅谈Maven resrouce下filtering作用

    浅谈Maven resrouce下filtering作用

    Filtering是Maven Resources Plugin的一个功能,本文主要介绍了浅谈Maven resrouce下filtering作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Springboot中使用Filter实现Header认证详解

    Springboot中使用Filter实现Header认证详解

    这篇文章主要介绍了Springboot中使用Filter实现Header认证详解,当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改,需要的朋友可以参考下
    2023-08-08
  • 剑指Offer之Java算法习题精讲二叉树专项解析

    剑指Offer之Java算法习题精讲二叉树专项解析

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • SpringBoot3利用AOP实现IP黑名单功能

    SpringBoot3利用AOP实现IP黑名单功能

    在Web应用开发中,控制对特定IP地址的访问权限是一个常见的需求,通过实现IP黑白名单功能,我们可以允许某些IP地址访问应用,同时拒绝其他IP地址的访问,本文将详细介绍SpringBoot3利用AOP实现IP黑名单功能,并附上相应的代码片段,需要的朋友可以参考下
    2024-09-09

最新评论