Java中的lambda表达式如何理解——精简
✌️✌️✌️在写之前,我在考虑是否要写这篇文章,然而当我查阅“lambda表达式”的相关内容的时候,我发现大量的文章都出现了冗余的现象,文章的篇幅过于夸张,严重影响了大家阅读的兴趣,因此我决定写一篇关于lambda表达式的文章,让大家能够在一定程度上对lambda表达式有一定的理解。希望能够对你在Java的学习中起到一定的帮助。
Lambda概述
Lambda表达式是JDK8开始后的一种新语法形式
作用:简化匿名内部类的代码写法
格式:
(匿名内部类被重写方法的形参列表)->{被重写方法的方法体代码 } 注:->是语法形式,无实际意义
首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:
使用Lambda表达式之前:
public static void main (String[] args){People p = new People(){@Overridepublic void run(){System.out.println("小学生跑的很慢");}};p.run(); } abstract class People{public abstract void run(); }
使用Lambda表达式之后:
People p = ()->{System.out.println("小学生跑的很慢"); }; //会出现报错
会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。
真正意义上通过Lambda表达式简化:
@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法 interface People{void run(); } //简化之前的匿名内部类 People p = new People(){@Overridepublic void run(){System.out.println("小学生跑的很慢!");} }; //简化之后 People p = () -> {System.out.println("小学生跑的很慢!"); };
另外,也可以将其作为参数代入方法中去使用:
//在原来的基础上定义一个pk方法 public static void pk(People p){System.out.println("跑步情况如何:")p.run(); } //不使用Lambda的情况下: pk(p);//需要在定义匿名内部类之后,将p代入; //使用Lambda的情况: People p = () -> {System.out.println("小学生跑的很慢!"); }; pk(() -> {System.out.println("小学生跑的很慢!"); }); //由于等号右边即是People创建的对象p,因此可以可以直接将其代入
Lambda的好处:
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。
Lambda实战的作用
在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:
//精简之前: Arrays.sort(grade,new Comparator<Integer>(){@Overridepublic int compare(Integer o1,Integer o2){return o2 -o1; } }); //精简之后: Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1; });
Lambda表达式省略规则
- 参数类型可以省略不写
//参考前面的实战例子 Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1; }); //省略参数类型之后 Arrays.sort(grade,( o1, o2){return o2 -o1; });
- 如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义 btn.addActionListener((ActionEvent e) -> {System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> {System.out.println("我是简单的例子。"); });
- 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子 btn.addActionListener( e -> {System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> System.out.println("我是简单的例子。") );
- 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
//参照第一条规则的代码 Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1; }); //简化之后: Arrays.sort(grade,( o1, o2)-> o2 -o1);
创作不易,给个三连
Java中的lambda表达式如何理解——精简相关推荐
- 如何开始使用Java中的Lambda表达式
by Luis Santiago 路易斯·圣地亚哥(Luis Santiago) 如何开始使用Java中的Lambda表达式 (How to start working with Lambda Exp ...
- 如何在Java中使用Lambda表达式
如何在Java中使用Lambda表达式 Lambda表达式是Java 8新增的一个非常强大的特性.它使得函数式编程在Java中变得更加容易和直观. Lambda表达式的基础知识 在Java中,Lamb ...
- 通俗理解Java中的Lambda表达式
Lambda Lambda表达式支持将代码块作为方法参数, 允许使用更为简洁的方式实现抽象类或接口的抽象方法, 而不再是通过匿名内部类的方式, 它具有对某一方法重写或实现的功能; 接下来通过一个简单的 ...
- java中的lambda表达式学习
Lambda表达式是给函数式接口(SAM接口)的变量或形参赋值的表达式. Lambda表达式替代了原来使用匿名内部类的对象给函数式接口(SAM接口)的变量或形参赋值的形式. java提供了大量的函数式 ...
- java lambda max_在Java中使用Lambda表达式查找Max
小编典典 该方法Comparator.comparing(-)旨在创建一个Comparator使用基于对象属性的订单进行比较的.当使用lambda表达式i -> i(这是(int i) -> ...
- 【java】理解和运用Java中的Lambda
1.概述 转载:理解和运用Java中的Lambda 前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambd ...
- JAVA如何遍历arraylist数组,Java 程序使用Lambda表达式遍历ArrayList
Java 程序使用Lambda表达式遍历ArrayList 在此示例中,我们将学习在Java中使用lambda表达式遍历数组列表的每个元素. 要理解此示例,您应该了解以下Java编程主题: 示例:将A ...
- 使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序
作为JSR 335的一部分, Lambda表达式已从Java 8开始引入Java语言,这是Java语言的一个重大变化. 如果您想了解更多关于Lambda表达式以及JSR 335的信息,可以访问以下资源 ...
- Java 8:在新的Nashorn JS引擎中编译Lambda表达式
在最近的一篇文章中,我了解了Java 8和Scala如何实现Lambda表达式. 众所周知,Java 8不仅引入了对Javac编译器的改进,而且还引入了全新的解决方案-Nashorn. 这个新引擎旨在 ...
最新文章
- JS每日一题: 小程序页面之间如何通信?
- C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析
- flask貌似html文件里只能用flask指定的路径格式,css文件里则可用相对路径
- 北漂程序员边城的幸福生活
- 整理JS+FLASH幻灯片播放图片脚本代码
- 基于php的外卖订餐系统开题报告_订餐系统开题报告.doc
- vivox50pro鸿蒙系统,小米10至尊纪念版和vivox50pro+哪一款手机好
- 随机初始化(代码实现)
- java 队列实现_队列的实现(JAVA)
- java 生成pdf 下载_java生成PDF,并下载到本地
- EPL许可证人话翻译
- 《照明设计》ASAP高级光学系统分析软件 在线 技术文章
- 小屏幕android电视,神奇!只需一个方法,让电视当作手机屏幕!
- python化学公式配平_配平化学方程式的C++代码实现
- 解决windows下无法ctrl+A全选数据快捷键的问题
- 日本多城现共享单车 日网友:感受到中国式刺激
- docker执行权限问题Got permission denied while trying to connect to the Docker daemon socket
- 计算机专业排名2014,2014计算机考研院校排名
- 相机快门_向我的智能手机添加远程相机快门的最简单方法是什么?
- VUE计算属性如何带参数
热门文章
- COCO/VOC 数据集加速下载
- cmake 编译opencv 缺失opencv_ffmpeg.dll 、 opencv_ffmpeg_64.dll、ffmpeg_version.cmake等问题
- linux更换包管理工具,技术|5 个给 Linux 新手的最佳包管理器
- MyBatis报无效的列索引的错误
- 爬虫项目四:2021最新测试可用淘宝爬虫
- 线性稳压器LDO并联在输入输出端二极管的作用
- Java毕业设计合集大推送
- html 中返回上一步页面,(移动端)在APP中嵌入H5网页,返回上一步返回APP菜单首页...
- 法规标准-GB/T 39323标准解读(2020版)
- VUE | 好看的 404 页面