当前位置: 首页 > article >正文

【Java】lambda表达式的3种写法

lambda表达式:

简单来说,可以看成是对匿名内部类的简写。使用Lambda表达式时,接口必须是函数式接口

基本语法

<函数式接口>  <变量名> = (参数1,参数2...) -> {

                    //方法体

     }

lambda表达式:简化版 

特点说明:

(参数1,参数2…)表示参数列表;->表示连接符;{}内部是方法体
1、=右边的类型会根据左边的函数式接口类型自动推断;
2、如果形参列表为空,只需保留();
3、如果形参只有1个,()可以省略,只需要参数的名称即可;
4、如果执行语句只有1句,且无返回值,{}可以省略,若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有1句;
5、形参列表的数据类型会自动推断;
6、lambda不会生成一个单独的内部类文件;
7、lambda表达式若访问了局部变量,则局部变量必须是final的,若是局部变量没有加final关键字,系统会自动添加,此后在修改该局部变量,会报错;

下述是3个案例讲述lambda表达式对匿名内部类的简化

第一种写法:有参数无返回值

package cn.meituan.lambdaHasArgsAndNoReturn;/*** 有参无返回值测试类* /*** lambda表达式简化版* 1.参数只需要名字,不需要类型,会自动推断类型* 2.参数只有一个省略小括号,没有参数小括号不能省略* 3.lambda体(方法体)中只有一句话,省略掉{}* 4.lambda体(方法体)中只有一句话,如果是return,{}省略,而且return也要省略。*/
public class HasArgsAndNoReturnTest {public static void main(String[] args) {// 1.采用匿名内部类方式 接口代替实现类对象MyInterface my = new MyInterface() {@Overridepublic void sum(int a, int b) {//实例方法(非static修饰)// 没有返回值就直接进行输出System.out.println(a + b);}};// 2.采用lambda表达式 简化版/*** lambda表达式简化版* 1.参数只需要名字,不需要类型,会自动推断类型* 2.参数只有一个省略小括号,没有参数小括号不能省略* 3.lambda体(方法体)中只有一句话,省略掉{}* 4.lambda体(方法体)中只有一句话,如果是return,{}省略,而且return也要省略。*/MyInterface my1 = ( a,  b) -> System.out.println(a + b);// 调用方法 接口名方法名// 非static修饰 对象名(接口对象名).方法名my.sum(5, 6);my1.sum(5, 6);}
}

第二种写法:有参数有返回值

package cn.meituan.lambdaHasArgsAndReturn;/*** 测试类* 有参有返回值测试类* * @author Mixi**/
public class HasArgsAndReturnTest {public static void main(String[] args) {// 1.采用匿名内部类方式  MyInterface my1 = new MyInterface() {@Overridepublic int sum(int a, int b) {return a+b;}};// 2.采用lambda表达式:简化版MyInterface my2 =(a,b) -> a+b;//调用方法 接口名方法名System.out.println("两个数和为:"+my1.sum(5, 10));		System.out.println("两个数和为:"+my2.sum(5, 20));			}
}

第三种写法:无参无返回值测试类

package cn.meituan.lambdaNoArgsAndNoReturn;/*** 无参无返回值测试类* @author Mixi**/
public class NoArgsAndNoReturnTest {public static void main(String[] args) {// 1.采用匿名内部类方式MyInterface my = new MyInterface() {// 重写抽象父类中的抽象方法@Overridepublic void speaking() {System.out.println("每个人从小就要学说话");}};// 2.采用lambda表达式 简化版MyInterface my1 = ()-> System.out.println("每个人从小就要动作");// 调用方法 接口名.方法名my.speaking();my1.speaking();		}
}

http://www.lryc.cn/news/2417746.html

相关文章:

  • MyCat 管理及监控
  • 高级 Perl:文件处理与模块使用
  • 一文彻底了解ES6中的var、let、const基本用法以及暂时性死区和变量提升的区别
  • 深入浅出单例模式(全网最详细且通俗易懂讲解)
  • GPIO是啥
  • 都这麽大了还不快了解IDS?
  • HashMap笔记(自用+更新中)
  • String.format()的使用
  • 蓝牙beacon 功能简介
  • Kylin的介绍、使用和原理架构(Kylin3.0和Kylin4.0,Cube,去重原理,性能优化,MDX For Kylin,BI工具集成)
  • C++ MFC程序框架结构解析(详细)
  • vue系列 —— vue-route详细使用方法
  • Sqlmap常用命令总结
  • sudo权限管理
  • 是不是都把SELinux给忘了?
  • git命令归纳整理及如何使用
  • JDBC连接数据库小白级教程
  • 设计模式学习(三):Adapter适配器模式
  • JavaFX17 现代 Java 客户端权威指南(七)
  • Unity-3D游戏开发套件指南(入门篇)-免费资源
  • 如何快速而准确地进行 IP 和端口信息扫描:渗透测试必备技能
  • PID超详细教程——PID原理+串级PID+C代码+在线仿真调参
  • 一文彻底搞懂 TSL 流程
  • 计算机网络一篇文章就能掌握,拓扑结构图文解析,协议详解等
  • Java中indexOf()的用法
  • 一文搞懂AOP 通俗易懂
  • NTFS(微软专用文件系统)
  • vault-服务器密码/证书管理工具
  • Content-type的几种常见类型及php://input的使用
  • STM32之RCC(1)