将行为作为数据传递

函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升。

Java8怎么支持函数式编程? 主要有三个核心概念:

  • 函数接口(Function)
  • 流(Stream)
  • 聚合器(Collector)

函数接口

关于函数接口,两件事:

  • 函数接口是行为的抽象
  • 函数接口是数据转换器

java.util.Function包,定义了四个最基础的函数接口:

  • Supplier

数据转换器,可以提供T类型对象;无参的构造器,提供了get方法

  • Function

数据转换器,接收一个T类型的对象,返回一个R类型的对象;单参数单返回值的行为接口;提供了apply,compose,andThen,identity方法;

  • Consumer

数据消费器,接收一个T类型的对象,无返回值,通常用于根据T对象做些处理;单参数无返回值的行为接口;提供了accept,andThen方法;

  • Predicate

条件测试器,接收一个T类型的对象,返回布尔值,通常用于传递条件函数;单参数布尔值的条件性接口;提供了test(条件测试),and-or-negate(与或非)方法。

其中,compose,andThen,and,or,negate用来组合函数接口而得到更强大的函数接口。

聚合器

每一个流式计算的末尾总有一个类似collect(Collectors.toList())的方法调用。collect是Stream的方法,而参数则是聚合器Collector. 已有的聚合器定义在Collectors的静态方法里。那么这个聚合器怎么实现呢?

Reduce

大部分聚合器都是基于Reduce操作实现的。Reduce, 即推导。含有三个要素:初始值init, 二元操作符BinaryOperator,以及一个用于聚合结果的数据源S.

列表类聚合器

1. 使用ArrayList::new 创建一个空列表;

2.List::add 将Stream累积操作的中间结果加入到这个列表

3. 第三个函数则是将两个列表元素进行合并成一个结果列表中。

实例:集合聚合器toList、toSet 字符串连接器joining(),以及列表求和summingXXX、最多maxBy、最小minby

映射类聚合器

映射类聚合器基于Map合并来完成。

根据指定的值合并函数mergeFunction, 返回一个map合并器,用来合并两个map里相同key的值。mergeFunction用来对两个map中相同key的值进行运算得到新的value值,如果value值为null,会移除相应的key,否则使用value值作为对应key的值。

这个方法私有的,主要为支撑toMap,groupingBy而生。

最新文章

  1. XCode 中的代码块导出与导入
  2. Qt编写自定义控件二动画按钮
  3. [转]关于负margin在页面中布局的应用
  4. LR调用DLL(加密测试等)
  5. Java琐记
  6. 整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)
  7. 各浏览器的cookie的name个数/最大容量限制测试
  8. Linux入门(三)搭建服务器linux运行环境LAMP/LNMP
  9. 常见浏览器User-Agent大全
  10. Dynamics CRM2016 Web API之删除单个查找字段值
  11. python之路-数据运算
  12. Discrete Logging ZOJ - 1898 (模板题大小步算法)
  13. php面向对象的封装性
  14. Freemarker入门
  15. linux 中的定时任务crontab使用方法
  16. cookie和session 区别
  17. ktime使用例子【原创】
  18. centos7 docker镜像加速器配置
  19. DEDE利用Ajax实现调用当前登录会员的信息简要说明
  20. WebRTC协议

热门文章

  1. java语言——跨平台原理,jre,jdk
  2. JavaScript类
  3. java学习日记20230302-字符
  4. ubuntu22.04 git升级
  5. Word12 财务部制作本年年度报告office真题
  6. [Python灰帽子-黑客与逆向工程师的Python编程之道]书籍
  7. vscode 中用git命令合并分支
  8. 02_IntelliJ IDEA常用快捷键
  9. Redis Stack(生产适配-仅提供 Redis Stack 服务器) (6.2.4-v2版本)
  10. SAR成像(六):距离徙动矫正