目录
一、什么是函数式编程
函数式编程是一种是一种编程范式,它将计算视为函数的运算,并避免变化状态和可变数据。它是一种声明式编程范式,也就是说,编程是用表达式或声明而不是语句来完成的。
Lamda表达式:(a, b) -> a + b
比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。
二、函数式编程的几个特点
- 纯函数
- 函数的执行没有副作用
- 返回值仅依赖于输入参数
- 高阶函数
- 函数的参数可以是一个/多个函数
- 函数的返回值也可以是一个函数
Lamda表达式
箭头左边是参数列表,右边是函数体
方法引用class::method
三、流
可以将流想象成一个“水流管道”,水流就在这管道中形成了
数据好比水进入管道然后一步步加工过滤,消毒,煮沸 最后流出然后关闭管道
建立流的几种方式
- Arrays.stream .
- Collection.stream
- Stream.of
- Stream.iterate
- Stream.generate
- StreamSupport.stream
- IntStream
- Stream.builder()
常见操作符
filter, map, peek, findAny, findFirst,
forEach, anyMatch, noneMatch
count, min, max
四、Optional流
在java中,null不属于任何类型,可以将null赋值给任何引用对象的变量,它表示一个对象的引用是不存在的值,在程序中经常会出现引用值是null报错为空指针异常。
java 8 提供了Optional类,Optional 是一个容器类,可以用来保存任何类型的值,也可以保存null值,在一定程度上避免了空指针异常。
他的方法有:
常用方法:
isPresent, isEmpty
orElse, orElseGet, orElseThrow, or
ifPresent, ifPresentOrElse
Collectors -收集器
public final class Collectors
extends Object
实现各种有用的约简操作的Collector的实现,例如将元素累积到集合中,根据各种标准汇总元素等。
- 收集为一个集合对象- toList, toSet, toMap, toCollection
- 聚合计算- averagingXXX,summingXXX, maxBy, counting
- 分组统计- groupingBy
- 其他操作- mapping, collectingAndThen, joining
收集器Collectors主要提供了三大功能:
1.将流元素归约和汇总为一个值
2.元素分组
3.元素分区
Collectors -排序
- 简单类型使用sorted
-
sorted可以传入Comparator
-
-
倒序
-
-
自定义排序
五、flatMap -处理流的嵌套(高阶)
-
父子对象常见的集合属性
-
在流中产生了Optional元素
Reduce -万金油
执行归集操作–某种程度上和Collect 作用类似