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>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 对gmapping的理解

    对gmapping的理解参考网址:GMapping漫谈GMapping原理分析简单傻x的图解–gmapping

    2022年6月18日
    28
  • CSP考试总结_考试总结300字

    CSP考试总结_考试总结300字t1模拟很难受,要加大这方面练习,要习惯用草稿理清思路t2和去年一样的东西,也是高精的坑,考前应该补一下高精t3比较正常,这种大数据结构只有考虑暴力,打正解很容易浪费时间并且上头t4无能

    2022年8月6日
    5
  • Git删除本地分支_idea删除git分支

    Git删除本地分支_idea删除git分支引言:注:本人一直都是用的gitbash窗口完成日常的开发工作。事情是这样的,切换分支的时候命令打错了,gitcheckout后面没有跟分支名,结果gitstatus,很多delete的文件,直接冒冷汗,gitadd,commit之后发现本地与远程确实是删除了很多文件,我本地没有修改的代码,于是选择直接删除本地的分支,然后重新从远程拉分支。具体操作:我现在在dev20181018分支…

    2022年10月16日
    5
  • 单点登录

    单点登录

    2021年6月5日
    136
  • INTELLIJ IDEA15.0.2激活码-激活码分享

    (INTELLIJ IDEA15.0.2激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S…

    2022年3月25日
    123
  • sql调用存储过程exec用法_sqlserver存储过程执行日志

    sql调用存储过程exec用法_sqlserver存储过程执行日志一、【存储过程】存储过程的T-SQL语句编译以后可多次执行,由于T-SQL语句不需要重新编译,所以执行存储过程可以 提高性能。存储过程具有以下特点:• 存储过程已在服务器上存储• 存储过程具有安全特性• 存储过程允许模块化程序设计• 存储过程可以减少网络通信流量• 存储过程可以提高运行速度 存储过程分为用户存储过程、系统存储过程和扩展存储过程。存储过程Procedure是一组为了完成…

    2022年8月18日
    35

发表回复

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

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