可以在函数式接口上使用λ表达式,函数式接口就是只定义一个抽象方法的接口(函数式接口只可以定义一个抽象接口,但是可以定义多个默认方法)。

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

@FunctionalInterface表示该接口被设计成一个函数式接口

请注意,任何函数式接口都不允许抛出受检异常(checked exception)。如果你需要Lambda表达式来 抛出异常,有两种办法:定义一个自己的函数式接口,并声明受检异常,或者把Lambda包在一个 try/catch块中。

3.6 方法引用

方法引用主要有三类。

(1) 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。

(2) 指向任意类型实例方法的方法引用(例如String的length方法,写作String::length)。

(3) 指向现有对象的实例方法的方法引用(假设你有一个局部变量expensiveTransaction用于存放 Transaction类型的对象,它支持实例方法getValue,那么你就可以写 expensiveTransaction::getValue)。

3.8复合Lambda表达式的有用方法

3.8.1比较器复合

比较器:appleList.sort(Comparator.comparing(Apple::getWeight));

逆序:appleList.sort(Comparator.comparing(Apple::getWeight).reversed());

比较器链:appleList.sort(Comparator.comparing(Apple::getWeight).reversed().thenComparing(Apple::getColor));

3.8.2谓词复合

要么是重(150克以上)的红苹果,要么是绿苹果:

Predicate redAndHeavyAppleOrGreen = redApple.and(a -> a.getWeight() > 150) .or(a -> "green".equals(a.getColor())); ←─链接Predicate的方法来构造更复杂Predicate对象

3.8.3函数复合

Function接口为此配了andThen和 compose两个默认方法,它们都会返回Function的一个实例。

3.10小结

Lambda表达式可以理解为一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能 还有一个可以抛出的异常的列表。

Lambda表达式让你可以简洁地传递代码。

函数式接口就是仅仅声明了一个抽象方法的接口。

只有在接受函数式接口的地方才可以使用Lambda表达式。

Lambda表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式 接口的一个实例。

Java 8自带一些常用的函数式接口,放在java.util.function包里,包括Predicate、 Function、Supplier、Consumer和BinaryOperator,如表3-2所述。

为了避免装箱操作,对Predicate和Function等通用函数式接口的原始类型特化: IntPredicate、IntToLongFunction等。

环绕执行模式(即在方法所必需的代码中间,你需要执行点儿什么操作,比如资源分配和清理)可以 配合Lambda提高灵活性和可重用性。

Lambda表达式所需要代表的类型称为目标类型。

方法引用让你重复使用现有的方法实现并直接传递它们。

Comparator、Predicate和Function等函数式接口都有几个可以用来结合Lambda表达式的默认 方法。

Java8实战读书笔记-第3章 λ表达式相关推荐

  1. spring boot 503_Spring实战读书笔记第4章 面向切面的Spring

    本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 在软件开发中,散布于应用中多的功能被称为横切关注点(cross-cutting con ...

  2. hive实战读书笔记(第9章)Hive性能优化

    hive用户面临的一个比较大的问题是,用户需要等待较长的响应时间,与传统关系数据库查询的性能相比,hive响应速度慢的令人发指 本章介绍一套诊断改进hive查询性能的系统方法,通过这个过程,将单个hi ...

  3. jQuery实战读书笔记(第一章至第四章)

    2019独角兽企业重金招聘Python工程师标准>>> 第一章 jQuery 基础 1. 包装器 jQuery对包装器(Wrapper)或包装集(wrapped set)进行操作,即 ...

  4. maven实战--读书笔记之第一章和第二章

    第一章:Maven简介 1.本书为国内社区公认的专家徐晓斌所写,本书基于maven3.0所编写,maven是非常优秀的建模工具,maven最大化的消除了构建的重复,抽象了构建生命,他还有一个优点,帮助 ...

  5. 《C++ Primer 4th》读书笔记 第5章-表达式

    原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3912114.html 转载于:https://www.cnblogs.com/DayByDay/p/ ...

  6. hive实战读书笔记(第4章)hive表DDL

    schema-on-read hadoop提供了存储和处理任何结构化,半结构化,非结构化数据的能力,hive允许用户在这些数据上创建一个元数据层,并使用sql接口来访问该层. hive并不是一个数据库 ...

  7. 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则

    #!/usr/bin/env python # encoding: utf-8''' <<机器学习实战>> 读书笔记 第11章 使用Apriori算法进行关联分析---从频繁项 ...

  8. 《Spring实战》读书笔记-第4章 面向切面的Spring

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  9. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

最新文章

  1. muduo学习笔记 - 第五章 高效的多线程日志
  2. java for的增强_Java基础之增强for循环
  3. 网际控制报文协议icmp_网络中的ICMP(Internet控制消息协议)
  4. 《Greenplum5.0 最佳实践》 内存与资源队列 (四)
  5. 自己动手写ORM框架
  6. 仿弹个课教育类APP项目,客户端+服务端
  7. html给字体设置大小,如何设置html字体大小
  8. tesserocr的安装
  9. 派森编程python_派森(Python)编程有什么用?
  10. Xcode一键发布到AppStore
  11. Leetcode 1087. Brace Expansion
  12. 摩托罗拉多开助手by IM大朋友
  13. 解决winscp只能下载,无法上传的问题
  14. cypress代理商与ic芯片有哪些品牌
  15. F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)
  16. 连锁管理系统有哪些功能?如何选择实用的连锁管理系统?
  17. 笔记:视音频基础6——视频基础
  18. 计算机网络信息安全总结报告,信息安全自查工作总结报告
  19. IT届人士的各种女人
  20. 宝马刷隐藏五系BMW530LI EVO开通全屏carplay

热门文章

  1. 《电脑报》:两个天价网站背后迷雾
  2. DirectShow之视频处理
  3. Ps如何使用透视裁剪工具
  4. 5G精华问答 | 什么是5G?5G与LTE有什么关系?
  5. 厉害!23岁本科生发14篇SCI论文,并任外审专家……
  6. threeJS案例模板
  7. 1011 A+B 和 C (15分)(输出格式 数据类型范围)
  8. 什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?
  9. 按ASC码对字符串排序
  10. .bat文件打开闪退