Java之Lambda表达式详解

Java之Lambda表达式详解Lambda表达式,也可称为闭包,它是推动Java8发布的最重要新特性。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以使代码变的更加简洁紧凑。一、lambda表达式的语法格式如下:标准格式:(形式参数)->{代码块}Lambda表达式的代码分析●():里面没有内容,可以看成是方法形式参数为空●->:用箭头指向后面要做的事情●{}:包含一段代码,我们称之为代码块,可以看成是方法体中的内容实例.

大家好,又见面了,我是你们的朋友全栈君。

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。

一、lambda 表达式的语法格式如下:

标准格式:

(形式参数)->{代码块}
Lambda表达式组成三要素:括号,箭头,代码块

Lambda表达式的代码分析
●  (): 里面没有内容,可以看成是方法形式参数为空
●  ->:用箭头指向后面要做的事情
●  { 
   }: 包含一段代码,我们称之为代码块,可以看成是方法体中的内容

实例如下,用匿名内部类和Lambda表达式分别启动一个线程,相对于匿名内部类,我们会发现 Lambda 表达式更简洁


public class RunableDemo01 { 
   
    public static void main(String[] args) { 
   
        //匿名内部类的方式启动一个线程
        new Thread(new Runnable() { 
   
            @Override
            public void run() { 
   
                System.out.println(Thread.currentThread().getName()+"线程启动啦");
            }
        }).start();
        //Lambda表达式的方式启动一个线程
        new Thread(()-> System.out.println(Thread.currentThread().getName()+"线程启动啦")).start();
    }
}

二、Lambda表达式具体实例:

Lambda表达式使用前提

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

实例一
Lambda表达式是 方法 在调用接口中抽象方法时 直接实现接口中的抽象方法(如下)
在这里插入图片描述
实例二
这个是抽象方法带参时Lambda表达式如何传参(如下)
在这里插入图片描述
实例三:
Lambda表达式在一些情况下是可以省略简写的(如下)
接口:

package cnn.lambdaTest.Demo04;

public interface LamDemoImpl { 
   
    void fun(String s);
}

测试类:


public class LamDemo01 { 
   
    public static void main(String[] args) { 
   
        useFun((String s)->{ 
   
            System.out.println(s);
        });
        //参数的类型可以省略
        useFun((s)->{ 
    System.out.println(s);});
        //单个参数可以省略括号
        useFun(s-> { 
   System.out.println(s);});
        //代码块中单个语句可以省略大括号
        useFun(s-> System.out.println(s));
    }

    private static void useFun(LamDemoImpl la) { 
   
        la.fun("如何省略呢");
    }
}

省略的几种情况:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式使用注意事项:

  1. 使用Lambda表达式必须要有接口,并且接口中有且只有一个抽象方法
  2. 必须有上下文环境,才能推导出Lambda表达式对应的接口
根据局部变量的赋值知Lambda对应的接口: Runnabler=() -> System.out.println("Lambda表达式");
根据调用方法的参数得知Lambda对应的接口: new Thread() -> System.out.printIn("Lambda表达式).start();

Lambda表达式与匿名内部类的区别可以看这个:传送门,有助于加深Lambda表达式的理解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156338.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月7日 下午1:00
下一篇 2022年7月7日 下午1:00


相关推荐

  • 利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能。

    利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能。利用 IDEA 搭建 SpringBoot 项目 整合 mybatis 实现简单的登录功能 利用闲余时间想自己搭建一个 springboot mybatis 的项目 提升一下自己对项目的了解 毕竟自己还是一个小白 在这里为自己创建项目的过程做一个记录 以便以后回忆 同时将搭建中遇到的问题也在这里做记录 如有遇到同样问题的同学 希望能给你一下借鉴 springboot 的优势之一

    2026年3月19日
    2
  • 玩转OpenClaw|云上OpenClaw一键秒级部署指南

    玩转OpenClaw|云上OpenClaw一键秒级部署指南

    2026年3月12日
    5
  • 删除windows默认共享[通俗易懂]

    删除windows默认共享  Windows2000的缺省安装很容易被攻击者取得账号列表,即使安装了最新的Servicepack也是如此。在Windows2000中有一个缺省共享IPC$,并且还有诸如admin$C$D$等等,而IPC$允许匿名用户(即未经登录的用户)访问,利用这个缺省共享可以取得用户列表。要想防范这些,可将在“管理工具→本地安全策略→安全设置→本地策略→

    2022年4月15日
    49
  • pycharm中文安装包

    pycharm中文安装包pycharm中文安装包如果是自定义安装的,那么他的相应地址应该是下面提供中文安装包链接:https://pan.baidu.com/s/1pf3B-kwZVRwzrWBxj-oZ7g提取码:hduy  这也是俺自己正在用的pycharm中文安装包Pycharm中文安装包一般来说都是放在C:\…

    2022年5月16日
    53
  • 一、智能车舵机控制

    一、智能车舵机控制前言:本文章主要是近期有关舵机知识的总结,将分别从舵机的控制原理,控制流程和代码实现流程几个方面作简要介绍,由于时间紧急,难免有疏漏错误之处,欢迎留言指正,QQ:2046890259一、多级的控制原理:我们本次智能车使用的舵机是通过PWM进行控制。而PWM几个重要的参数就是最大值,最小值和占空比。其中占空比决定了舵机的旋转角度,如下图所示:不同的占空比控制不同的角度。而我们的目的就是通过…

    2022年6月20日
    40
  • 什么是UDP攻击_机器人打电话营销效果

    什么是UDP攻击_机器人打电话营销效果UDP协议UDP是一个简单的面向数据报的运输层协议,也是最常见的作为流量攻击最多的一种协议,需要用到UDP的主要都是视频通讯,枪战类实时通讯的游戏类。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但并不保证它们能到达目的地。由于UDP传输数据前传输数据之前源端和终端不建立连接,且没有超时重发等机制,故而传输速度很快。UDP攻击UDP攻击是DDoS攻击的一种,是典型的流量型攻击。就好比学校中午放学时的食堂,学生大量飞奔食堂,但食堂窗口就那么多,学生数量太多,就只能挤在窗口前等待。

    2022年10月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号