Lambada表达式全面详解
Lambada表达式全面详解
文章目录
- Lambada表达式全面详解
- 前言
- 入门
- 类名引用静态方法
- 对像名引用方法
- 构造器引用
前言
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 只能针对只有一个抽象方法的接口实现。
函数式接口:
接口有且仅有一个抽象方法才能使用lambad表达式。
函数式接口是指,有且仅有一个抽象方法的接口。
Java8引入了注解@FunctionalInterface修饰函数式接口的,要求接口中的抽象方法只有一个。
方法的引用:
Lambda主体只有一条语句时,程序可以省略主体大括号,还可以通过英文“ :: ”来引用方法和构造器。两种方式:
种类 | Lambda表达式 | 对应引用示例 |
---|---|---|
类名引用普通方法 | (x,y,…)->对象名x.类普通方法(x,y,…) | 类名 :: 类普通方法 |
类名引用静态方法 | (x,y,…)->类名.类静态方法(x,y,…) | 类名 :: 类静态方法名 |
对像名引用方法 | (x,y,…)->对象名.实例方法(x,y,…) | 对象名 :: 实例方法名 |
构造器引用 | (x,y,…)->new 类名(x,y,…) | 类名 :: new |
入门
代码示例:
public class Test {//函数式接口:用于声明方法 interface Person {void say();}interface Person2 {int custom(int i, int j);}//客户端:调用接口方法,可以自定义传入参数 public static void test(Person person) {//... person.say();}public static void test2(Person2 person2) {int i = 10;int j = 5;//... System.out.println(person2.custom(i, j));}//测试public static void main(String[] args) {//匿名内部类 test(new Person() {@Overridepublic void say() {System.out.println("*********");}});//lambada表达式:提供方法实现方式 test(() -> {System.out.println("**************");});test2((x, y) -> x + y);test2((x, y) -> x - y);}
}
lambada表达式完全可以看作是简化匿名内部类的写法,因此学习lambada可以以匿名内部类的去理解。
学习Lambada只是学习表达式的写法,并没有新技术可言。
类名引用静态方法
public class Test3 {private static void printAbs(int num, Calcable calcable) {System.out.println(calcable.calc(num));}public static void main(String[] args) {//lambda表达式 printAbs(-10, num -> Math.abs(num));//方法引用 printAbs(-10, Math::abs);}
}@FunctionalInterface
interface Calcable {int calc ( int num);
}class Math {public static int abs(int num) {if (num < 0) {return -num;} else {return num;}}
}
对像名引用方法
public class Test3 {private static void printAbs(int num, Calcable calcable) {System.out.println(calcable.calc(num));}public static void main(String[] args) {Math math = new Math();//lambda表达式 printAbs(-10, num -> math.abs(num));//方法引用 printAbs(-10, math::abs);}
}@FunctionalInterface
interface Calcable {int calc(int num);
}class Math {public int abs(int num) {if (num < 0) {return -num;} else {return num;}}
}
构造器引用
public class Test3 { private static void printName(String name, PersonBuild build){ System.out.println(build.buildPerson(name).getName()); } public static void main(String[] args) { //lambda表达式 printName("junjie",name -> new Person(name)); //方法引用 printName("junjie",Person :: new); }
}
@FunctionalInterface
interface PersonBuild{ Person buildPerson(String name);
}
class Person{ String name; public Person(String name) { this.name = name; } public String getName() { return name;} public void setName(String name) { this.name = name; }
}
Lambada表达式全面详解相关推荐
- JSP 中EL表达式用法详解
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- java ognl表达式 与struts2标签_Struts2 OGNL表达式实例详解
Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 例1: struts.xml: /ognl.jsp OgnlAction1.java: pac ...
- java8中的lambda表达式实用详解
java8中的lambda表达式实用详解 1. lambda简介 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...
- Spring EL表达式使用详解
Spring EL表达式使用详解 什么是Spring EL表达式 注入字面值 注入操作系统(OS)的属性 注入properties配置文件中数据 Bean属性调用 Bean方法调用 T运算符 构造器 ...
- Java Web----EL(表达式语言)详解
博文连接 Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从 ...
- java 解析el表达式_Javaweb El表达式实例详解
EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来消除jsp页面中的java脚本. el表达式的语法 expr ...
- Thymeleaf 标准表达式语法详解
Thymeleaf 表达式汇总 首先先加入命名空间 <html xmlns:th="http://www.thymeleaf.org"> 编号 属性 描述 示例 1 $ ...
- EL表达式 (详解)
表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集 ...
- 方立勋_30天掌握JavaWeb_EL表达式功能详解
简介 EL 全名为Expression Language.EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web ...
最新文章
- java逻辑符号怎么打_Java的逻辑运算符?
- 解决掉这些痛点和难点,让知识图谱不再是“噱头”
- R语言层次聚类(hierarchical clustering):数据缩放、PCA聚类结果可视化、fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性
- 文件查找利器---find详解
- IBM借QISKit打造基于云平台的量子计算
- mysql执行计划extra为null_MySQL执行计划extra解析
- 小师妹学JavaIO之:Buffer和Buff
- git如何切换分支_如何让 Jenkins 支持选择 git 分支进行构建
- [渝粤教育] 四川信息职业技术学院 高频电子技术 参考 资料
- mysql8事务级别_Mysql几种事务隔离级别
- 漫话:如何给女朋友解释什么是删库跑路?
- asp.net EF+MVC2实战2
- java运算符重载_为什么Java不支持运算符重载?
- bootstrap不同分辨率显示滚动条_bootstrap基础快速入门-8 响应式显示与隐藏
- 计算机如何安装pdf,pdf虚拟打印机是什么?怎么安装到电脑里
- python批量检测域名和url能否打开
- 计量经济学计算机第1章习题,计量经济学第1章习题.pdf
- oracle数据库 复制粘贴,Oracle数据库复制
- Redis 发布订阅原理以及springboo中RedisTemplate集成
- 什么录音软件可以录制电影对白
热门文章
- Redis硬核篇:从高频问题横扫核心知识原理
- PostgreSQL 数据库性能调优的注意点,pg数据库性能优化
- 极限内卷丨让我们偷偷的卷起来
- LTE、NR载波聚合(CA)-- 等级划分
- php搜索功能实现,PHP 搜索查询功能实现
- 首先考虑IES参与到碳交易市场,引入阶梯式碳交易机制引导IES控制碳排放;接着细化电转气(P2G)的两阶段运行过程
- 无人机视频回传、5G视频回传、5G无人机回传
- 年轻貌美的小姐姐加我微信后竟要求我帮她做这种事...
- RabbitMq实战——外卖派单通过补单系统实现分布式事务
- html 功能性链接,web前端之html(三)超链接、锚链接和功能性链接