2019独角兽企业重金招聘Python工程师标准>>>

一、Lambda管中窥豹

1、lambda没有名称,但它有参数列表,函数主体,返回类型,可能还有一个可以抛出的异常列表。

2、基本语法:

(parameters)->expression
或
(parameters)->{statements;}

二、在哪里以及如何使用Lambda

1、函数式接口

(1)函数式接口就是只定义一个抽象方法的接口(可以有多个默认方法)

(2)Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例(具体来说,是函数式接口一个具体实现的实例)

2、函数描述符

函数式接口的抽象方法的签名基本上就是Lambda表达式的签名。

三、把Lambda付诸实践:环绕执行模式

1、第1步,记得行为参数化

public static String processFileLimited() throws IOException {try (BufferedReader br =new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))) {return br.readLine();}
}

2、第2步,使用函数式接口来传递行为

public interface BufferedReaderProcessor{public String process(BufferedReader b) throws IOException;}public static String processFile(BufferedReaderProcessor p) throws IOException {
}

3、第3步:执行一个行为

public static String processFile(BufferedReaderProcessor p) throws IOException {try(BufferedReader br = new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))){return p.process(br);}}

4、第4步:传递Lambda

String oneLine = processFile((BufferedReader b) -> b.readLine());
System.out.println(oneLine);String twoLines = processFile((BufferedReader b) -> b.readLine() + b.readLine());
System.out.println(twoLines);

四、使用函数式接口

五、类型检查、类型推断以及限制

1、类型检查

类型检查过程可以分解为如下所示。

首先、你要找出filter方法的声明

第二、要求它是Predicate<Apple>(目标类型)对象的第二个正式参数。

第三、Predicate<Apple>是一个函数式接口,定义了一个叫作test的抽象方法。

第四、test方法描述了一个函数描述符,它可以接收一个Apple,并返回一个boolean

最后、filter的任何实际参数都必须匹配这个要求。

2、同样的Lambda,不同的函数式接口

Comparator<Apple> c1 =(Apple a1,Apple a2)->a1.getWeight().compareTo(a2.getWeight()):
ToIntBiFunction<Apple,Apple> c2 =(Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight()):
BiFunction<Apple,Apple,Integer> c3 =(Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight()):

3、类型推断

编译器可以了解Lambda表达式的参数类型,这样就可以在Lambda语法中省去标注参数类型。

4、使用局部变量

Lambda可以没有限制地捕获(也就是在其主体中引用)实例变量和静态变量。但局部变量必须显示声明final,或事实上是final。换句话说,Lambda表达式只能捕获指派给它们的局部变量。(注:捕获实例变量可以被看做捕获最终局部变量this)

六、方法引用

1、管中窥豹

使用方法引用时,目标引用放在分隔符::前,方法的名称放在后面。

2、构造函数引用

七、Lambda和方法引用实战

八、符合Lambda表达式的有用方法

1、比较器复合

(1)、逆序

(2)、比较器链

2、谓词复合

谓词接口包括三个方法:neget、and和or

3、函数复合

九、数学中的类似思想

1、积分

2、与java8的Lambda联系起来

转载于:https://my.oschina.net/u/2427561/blog/2235925

第三章 Lambda 表达式相关推荐

  1. C++Primer 第10章lambda表达式

    C++Primer 第10章lambda表达式 泛型编程 咱们继续高歌猛进,下面我给大家继续讲关于算法的故事. 我们知道标准库容器中定义的算法大多数独立在算法之外,通常这些算法是通用的.它们可以处理不 ...

  2. 三:Lambda表达式

    本章内容 Lambda管中窥豹 在哪里以及如何使用Lambda 环绕执行模式 函数式接口,类型推断 方法引用 Lambda复合 1. lambda管中窥豹 1.1 可以把Lambda表达式理解为简洁地 ...

  3. 《Java8实战》第3章 Lambda 表达式

    利用行为参数化来传递代码有助于应对不断变化的需求.它允许你定义一段代码块来表示一个行为,然后传递它. 采用匿名类来表示多种行为并不令人满意:代码十分啰唆,这会影响程序员在实践中使用行为参数化的积极性. ...

  4. java lambda表达式_凯哥带你从零学大数据系列之Java篇---第二十二章:Lambda表达式...

    温馨提示:如果想学扎实,一定要从头开始看凯哥的一系列文章(凯哥带你从零学大数据系列),千万不要从中间的某个部分开始看,知识前后是有很大关联,否则学习效果会打折扣. 系列文章第一篇是拥抱大数据:凯哥带你 ...

  5. [C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别(日文翻译)...

    Lambda表达式与匿名方法的区别 那么,为什么Lambda表达式比匿名方法写起来要短呢?这种像变戏法一样的手法真的能用吗?有没有重要信息遗漏掉呢?为了回答这些问题,就让我们把匿名方法和Lambda表 ...

  6. Java8 Lambda表达式(三)Lambda表达式与Stream API

    目录 1 Stream基本概念 1.1 什么是Stream 1.2 Stream的特点 2 Stream API初体验 2.1 构造数据 2.1 使用for循环实现 2.2 使用Lambda表达式结合 ...

  7. java day18【线程池、Lambda表达式】

    第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...

  8. Lambda表达式和Stream流

    第一章.函数式编程思想和Lambda表达式定义格式 1.面向对象思想:重点是找对象,调用对象中的方法帮我们去做事儿,侧重点在找对象 2.函数式编程思想:对面向对象思想进一步简化,不注重过程,只注重结果 ...

  9. day07【线程池、Lambda表达式】(1)

    day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念 -[ ] 能够理解等待唤醒机制 -[ ] 能够描述Java中线 ...

最新文章

  1. Siege的线程模型-基于版本2.56
  2. html3D效果可以在手机打开吗,手机怎么打开HTML
  3. JavaScript中数组slice和splice的对比小结
  4. Linux下MySQL 5.5.11编译安装笔记(待验证)
  5. leetcode-125 Valid Palindrome
  6. 【Liteos系列】之osCmdReg
  7. Dart 基礎 - 3
  8. Geohot使用绿雨的BETA4越狱iPhone4 4.1固件详细教程
  9. ➤mobi➢azw3➢epub⇨电子书阅读器 转换器
  10. python怎么做成app_自己怎么做App软件 自己制作APP教程
  11. android 饿了么 布局,Android仿饿了么详情页可以跟随手指移动 viewpager变详情页
  12. Excel 如何引用某表格中的某一列作为数据有效性验证
  13. 超图申请试用以及激活
  14. linux 获取视频截图,linux ffmpeg 视频截图 安装使用
  15. 图机器学习——5.9 图神经网络:图的增广
  16. mysql 1146 错误处理
  17. slick.js应用
  18. Monkey测试问题及解决方法
  19. runspec 的选项说明(spec2006官方文档的翻译)
  20. 四则运算游戏 java代码_四则运算程序(java基于控制台)

热门文章

  1. python换零钱有多少种方案_Python之100个项目:零钱转换程序
  2. 第 2 章 索引优化分析
  3. linux pv命令,pv命令_Linux pv命令使用详解:用来度量执行命令的具体信息
  4. Elasticsearch基础(一)mapping
  5. qt获取当前正在编辑的文件名和路径_node学习——path 路径模块
  6. flutter图片聊天泡泡_flutter即时聊天IM仿微信|flutter聊天界面
  7. sql 在某表中加入一列count所有数据_执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?...
  8. vacode允许c_使用VS code编译运行C,C++,Java程序
  9. CommonJS模块的循环加载
  10. js正则匹配小数点后2位_正则实践与详解