Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数是接口)的实例

意义

  • 自从Java 8开始,Java支持Lambda表达式
  • 当使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块将会代替实现抽象方法的方法体,Lambda表达式就相当于一个匿名内部类

Lambda表达式的构成:

  • 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略
  • 箭头(->)
  • 代码块。若只包含一条语句,则可以省略花括号。若只有一条return语句,可以省略return语句,Lambda会自动返回这条语句的值
interface Eatable{void taste();
}
interface Flyable{void fly(String weather);
}
interface Addable{int add(int a , int b);
}
public class LambdaQs{// 调用该方法需要Eatable对象public void eat(Eatable e){System.out.println(e);e.taste();}// 调用该方法需要Flyable对象public void drive(Flyable f){System.out.println("我正在驾驶:" + f);f.fly("【碧空如洗的晴日】");}// 调用该方法需要Addable对象public void test(Addable add){System.out.println("5与3的和为:" + add.add(5, 3));}public static void main(String[] args){LambdaQs lq = new LambdaQs();// Lambda表达式的代码块只有一条语句,可以省略花括号lq.eat(()-> System.out.println("苹果的味道不错!"));// Lambda表达式的形参列表只有一个形参,省略圆括号lq.drive(weather ->{System.out.println("今天天气是:" + weather);System.out.println("直升机飞行平稳");});// Lambda表达式的代码块只有一条语句,省略花括号// 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return关键字lq.test((a , b)->a + b);}
}

Lambda表达式与函数式接口

  • Lambda表达式类型,也称之为 “目标类型” ,Lambda表达式的目标类型必须是 “函数时接口(functional interface)”。函数时接口代表包含一个抽象方法的接口。函数时接口可以包含多个默认方法,类方法,但只能声明一个抽象方法
  • 函数式接口使用@FunctionalInterface注解
  • Lambda主要的限制:
    • Lambda表达式的目标类型必须是明确的函数式接口
    • Lambda表达式只能为函数式接口创建对象
  • Java8在java.util.function包下定义了大量的函数式接口,典型的为以下四种:
    • XxxFunction:这类接口中通常包含一个apply()抽象方法
    • XxxConsumer:这类接口中通常包含一个accept()抽象方法
    • XxxPredicate:这类接口中通常包含一个test()抽象方法
    • XxxSupplier:这类接口中通常包含一个getAsXxx()抽象方法

方法引用与构造器引用

种类 示例 说明 对应的Lambda表达式
引用类方法 类名::类方法 函数式接口中被实现方法的全部参数传给该类方法作为参数 (a,b,…) -> 类名.类方法(a,b,…)
引用特定对象的实例方法 特定对象::实例方法 函数式接口中被实现方法的全部参数传给该方法作为参数 (a,b,…) -> 特定对象.实例方法(a,b,…)
引用某类对象的实例方法 类名::实例方法 函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该方法作为参数 (a,b,…) -> a.实例方法(b,…)
引用构造器 类名::new 函数式接口中被实现方法的全部参数传给该类方法作为参数 (a,b,…) -> new 类名(a,b,…)

Lambda表达式与匿名内部类的联系和区别

  • 相同点:

    • Lambda表达式与匿名内部类一样,都可以直接访问 “effectively final” 的局部变量,以及外部类的成员变量(包括实例变量和类变量)
    • Lambda表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法
  • 不同点:
    • 匿名内部类可以为任意接口创建实例;但Lambda表达式只能为函数式接口创建实例
    • 匿名内部类可以为抽象类甚至普通类创建实例;但Lambda表达式只能为函数式接口创建实例
    • 匿名内部类实现的抽象方法的方法体允许调用接口定义中定义的默认方法;但Lambda表达式的代码块不允许调用接口中定义的默认方法

Java学习笔记-Lambda表达式相关推荐

  1. Java学习笔记---Lambda表达式及Stream流Api

    Lambda 特性: 允许把函数作为参数传递进方法. 前置条件: 必须是函数式接口---------->[函数式接口:满足以下三条1.接口中只有一个抽象方法.2.可以有默认实现的方法.3.可以有 ...

  2. kotlin学习笔记——lambda表达式

    先简单说说lambda表达式: (Type a, Type b, ...) -> {...} 左边是参数(参数类型可省略),如果只有一个参数括号也可以省略,右边是函数体和返回结果(大括号可省略) ...

  3. C++11 学习笔记 lambda表达式

    http://blog.csdn.net/fjzpdkf/article/details/50249287 lambda表达式是C++11最重要也最常用的一个特性之一.lambda来源于函数式编程的概 ...

  4. java学习笔记—EL表达式(38)

    EL表达式 EL即Expression Language,主要的任务是帮助开发者简化获取域属性. 但是一般情况下需要使用EL和JSTL结合使用. 语法: ${ // 隐含对象|直接写域中的属性 }  ...

  5. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  6. java学习笔记20(Lambda表达式、函数式编程、流式计算、练习)

    文章目录 11.3 学习内容 Lambda表达式 Lambda标准格式 格式说明 省略规则 使用前提 函数式接口 预定义的函数式接口 工作内容 任务1 总结&明日计划 11.4 学习内容 流式 ...

  7. Java学习笔记之 Lambda表达式

    Java Lambda表达式 Lambda表达式 1.引言 2.为什么 Java 需要 Lambda 表达式 3.Lambda 表达式的结构 3.1.Lambda 表达式:语法 4.在哪里使用lamb ...

  8. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

    java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  10. 2022年Java学习笔记目录

    一.2022年Java任务驱动课程 任务驱动,统摄知识点:2022年Java程序设计讲课笔记 二.2022年Java学习笔记 (一)踏上Java开发之旅 Java学习笔记1.1.1 搭建Java开发环 ...

最新文章

  1. 哨兵2号波段_艾略特波段理论分析,A50和恒指走势的蛛丝马迹,完全暴露A股主力意图!...
  2. GNU make manual 翻译(四十三)
  3. 使用 Exceptionless 作为 Log Server 搭配 NLog 记录系统日志
  4. java通过commons-fileupload实现多张图片的上传(servlet)
  5. python中 1.34e3_Python快速编程入门——第2章 Python基础语法
  6. python的特性注定了代码无法保密_python 基础
  7. oracle分布式数据库中间件,分布式数据库中间件设想
  8. FIFO算法与LRU算法
  9. Struts2——知识点:Action Implements SessionAware
  10. 阿里云服务器好吗?老司机谈谈阿里云服务器的使用感受
  11. 苹果支持WebRTC
  12. 当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
  13. 扫描技术的原理与应用(Nmap使用)
  14. (附源码)计算机毕业设计黄淮学院二手物品交易平台
  15. mysql 批量数据插入很慢(kettle 输入输出组件) 性能优化办法
  16. 关于抽象类和抽象方法
  17. JavaScript总结【11】事件简介
  18. Fun之使用火绒剑对AsmToE工具行为分析
  19. 计算机硬件基础-CPU
  20. win10 运行虚拟机后就死机,求解决

热门文章

  1. Rhino6.25软件安装教程|兼容WIN10
  2. 更好用计算机怎么打,电脑输入法哪个好用(最受欢迎的7大输入法对比详情)...
  3. 写给在写毕业论文的你们免安装深度学习线上GPU环境准备
  4. 【人脸表情识别】基于matlab GUI微表情识别系统【含Matlab源码 1852期】
  5. 遍历文件夹进行点云格式转换 PCD转BIN BIN转PCD PCD转TXT TXT转PCD PLY转PCD
  6. EMC传导骚扰的共模电流与差模电流
  7. 【Python3】23.求平方根---牛顿迭代法
  8. FPGA基础入门【10】开发板Ethernet PHY局域网配置
  9. HDU 2243(AC自动机+矩阵快速幂)
  10. 汽车冬季养护的四个重点