Lambda表达式

Lambda表达式

一、简介

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

二、表示形式

(parameters) -> expression 或 (parameters) ->{ statements; }

多个语句使用{}括起来

方法( (形参 )-> {

​ 语句1;

​ 语句2;

} );

2.1无参数

可以明显看出,Lamda表达式比匿名内部类的写法简单许多。(只需要编写核心语句)

public interface MyInterface {
    /**
     * 测试方法1
     */
    //public void test();

    /**
     * 测试方法2
     * @param a
     * @param b
     * @return
     */
    public int getSum(int a,int b);
}

/**
 * @Author: 郜宇博
 * @Date: 2021/8/31 17:07
 * lamda联系
 */
public class LamdaExpressionTest {
    public static void main(String[] args) {
        //方法一:
        mainTest(new MyInterfece() {
            @Override
            public void test() {
                System.out.println("匿名内部类实现");
            }
        });
       //方法二:Lambda表达式
        mainTest( ()->{
            System.out.println("lambda语句1");
            System.out.println("lambda语句2");
        });
    }
    public static void mainTest(MyInterfece myInterfece){
        myInterfece.test();
    }

}

2.2有参数

public class LambdaExpressionTest {
    public static void main(String[] args) {
        //方法一:匿名内部类
        getSum(new MyInterface() {
            @Override
            public int getSum(int a, int b) {
                return a+b;
            }
        },2,3);

        //方法二:lambda表达式
        getSum( (int a,int b)-> {return a+b;},2,3);
    }
    public static void getSum(MyInterface myInterface , int a, int b){
        int res = myInterface.getSum(a,b);
        System.out.println(res);
    }

}

三、使用

3.1使用外部参数

/**
 * @Author: 郜宇博
 * @Date: 2021/8/31 17:07
 * lamda联系
 */
public class LambdaExpressionTest {
    public static void main(String[] args) {
        int num = 10;
        MyInterface myInterface = (int a,int b)->a+b+num;
        int sum = myInterface.getSum(2, 3);
        System.out.println(sum);

    }
    public static void getSum(MyInterface myInterface , int a, int b){
        int res = myInterface.getSum(a,b);
        System.out.println(res);
    }
}

3.2实现线程类的Runable方法

public class LambdaExpressionTest {
    public static void main(String[] args) {
        new Thread(()-> System.out.println("实现线程的run方法")).start();

    }
}

四、注意

  1. 可以直接在 lambda 表达式中访问外层的局部变量:

    <span>Lambda表达式</span>

  2. lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)

  3. 不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误(也说明了lambda表达式使用的外部变量为final修饰的)

<span>Lambda表达式</span>

  1. 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

<span>Lambda表达式</span>

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115174.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 根据/proc/partitions获取插入的U盘设备名称

    根据/proc/partitions获取插入的U盘设备名称1 在/proc/partitions中存放着U盘的设备名称,如sda,sdb2等,以sd开头。major主设备号,比如一个U盘有3个分区,主设备名为sda,major为8,分区的major也为8,minor则为分区号,sda1,sda2,minor值为1,2sda的minor为0,name即为设备名,连接/dev./设备名,就可以挂载到一个目录。blocks表示物理设备逻辑块

  • 客户端是移动端吗_谈单的技巧

    客户端是移动端吗_谈单的技巧1、百度开放平台选择开发者服务申请应用2、zai

  • sctp介绍「建议收藏」

    sctp介绍「建议收藏」SCTP介绍转自:http://www.ibm.com/developerworks/cn/linux/l-sctp/SCTP(STREAM CONTROL TRANSMISSION PROTOCOL 流控制传输协议)是IETF新定义的一个传输层transport layer协议(2000年)。是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。SCTP的设计用于通过IP网传输S

  • 函数指针和指针函数用法和区别

    函数指针和指针函数用法和区别前言函数指针和指针函数,在学习C语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。今天这里只…

  • 超详细的Git下载安装、环境变量配置教程

    超详细的Git下载安装、环境变量配置教程一、安装教程:1.首先去官网下载git安装包,附网址:https://git-scm.com/官网下载会比较慢,附上csdn下载链接:2.点击下载好的exe文件3.一直点击next,直到出现install,点击install,安装完成后点击finish:4.启动测试  到此,Git的安装完成,可以在开始菜单中看到Git的三个启动图标(GitBash、GitCMD(Deprecated)、GitGUI)。  GitBash

  • 部署和使用kibana

    部署和使用kibana

    2021年11月26日

发表回复

您的电子邮箱地址不会被公开。

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