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表达式全面详解相关推荐

  1. JSP 中EL表达式用法详解

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  2. java ognl表达式 与struts2标签_Struts2 OGNL表达式实例详解

    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 例1: struts.xml: /ognl.jsp OgnlAction1.java: pac ...

  3. java8中的lambda表达式实用详解

    java8中的lambda表达式实用详解 1. lambda简介 ​ Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...

  4. Spring EL表达式使用详解

    Spring EL表达式使用详解 什么是Spring EL表达式 注入字面值 注入操作系统(OS)的属性 注入properties配置文件中数据 Bean属性调用 Bean方法调用 T运算符 构造器 ...

  5. Java Web----EL(表达式语言)详解

    博文连接  Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从 ...

  6. java 解析el表达式_Javaweb El表达式实例详解

    EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来消除jsp页面中的java脚本. el表达式的语法 expr ...

  7. Thymeleaf 标准表达式语法详解

    Thymeleaf 表达式汇总 首先先加入命名空间 <html xmlns:th="http://www.thymeleaf.org"> 编号 属性 描述 示例 1 $ ...

  8. EL表达式 (详解)

    表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集 ...

  9. 方立勋_30天掌握JavaWeb_EL表达式功能详解

    简介 EL 全名为Expression Language.EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web ...

最新文章

  1. java逻辑符号怎么打_Java的逻辑运算符?
  2. 解决掉这些痛点和难点,让知识图谱不再是“噱头”
  3. R语言层次聚类(hierarchical clustering):数据缩放、PCA聚类结果可视化、fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性
  4. 文件查找利器---find详解
  5. IBM借QISKit打造基于云平台的量子计算
  6. mysql执行计划extra为null_MySQL执行计划extra解析
  7. 小师妹学JavaIO之:Buffer和Buff
  8. git如何切换分支_如何让 Jenkins 支持选择 git 分支进行构建
  9. [渝粤教育] 四川信息职业技术学院 高频电子技术 参考 资料
  10. mysql8事务级别_Mysql几种事务隔离级别
  11. 漫话:如何给女朋友解释什么是删库跑路?
  12. asp.net EF+MVC2实战2
  13. java运算符重载_为什么Java不支持运算符重载?
  14. bootstrap不同分辨率显示滚动条_bootstrap基础快速入门-8 响应式显示与隐藏
  15. 计算机如何安装pdf,pdf虚拟打印机是什么?怎么安装到电脑里
  16. python批量检测域名和url能否打开
  17. 计量经济学计算机第1章习题,计量经济学第1章习题.pdf
  18. oracle数据库 复制粘贴,Oracle数据库复制
  19. Redis 发布订阅原理以及springboo中RedisTemplate集成
  20. 什么录音软件可以录制电影对白

热门文章

  1. Redis硬核篇:从高频问题横扫核心知识原理
  2. PostgreSQL 数据库性能调优的注意点,pg数据库性能优化
  3. 极限内卷丨让我们偷偷的卷起来
  4. LTE、NR载波聚合(CA)-- 等级划分
  5. php搜索功能实现,PHP 搜索查询功能实现
  6. 首先考虑IES参与到碳交易市场,引入阶梯式碳交易机制引导IES控制碳排放;接着细化电转气(P2G)的两阶段运行过程
  7. 无人机视频回传、5G视频回传、5G无人机回传
  8. 年轻貌美的小姐姐加我微信后竟要求我帮她做这种事...
  9. RabbitMq实战——外卖派单通过补单系统实现分布式事务
  10. html 功能性链接,web前端之html(三)超链接、锚链接和功能性链接