函数式编程的定义
函数式编程是一种编程的范式,他将计算视为函数的运算,避免变化状态和可变数据。他是一种声明式编程范式,也就是说,编程是用表达式或者声明而不是语句来完成的。
Lamda 表达式 : (a,b) -> a + b
比起指令式的编程,函数式编程更加强调程序执行的结果而不是执行的过程,倡导利用若干个简单的执行单元让计算结果不断渐进,逐层推导复杂的运算
userList.stream().skip(1).peek(uer -> log.debug("user:{}", user.getUserName()).collect(Collectors.toList())
函数式编程的好处
让代码更精简易懂(搬砖更快了!)
函数式编程的特点
函数的执行没有副作用
返回值仅依赖于输入参数
高阶函数
函数的参数可以是一个/多个函数
函数的返回值也可以是一个函数
Lamda表达式
箭头左边是参数列表,右边是函数体
方法引用 class::method
Java函数式接口
有且仅有一个未实现的非静态方法的接口叫做“函数式接口”
Java 流
理解流的概念
建立流的方式
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 - 和null说再见
isPresent, isEmpty
orElse, or, orElseGet
Collectors - 收集器
收集为一个集合对象- toList, toSet, to
聚合计算- averagingXXX, summingXXX, maxBy
分组统计- groupingBy
其他操作 - mapping, collectingAndThen, joining
Flatmap - 处理流的嵌套
Reduce - 万金油
执行归集操作,某种程度上和collect类似
后言:本篇文章大多还是定义的记录,自己看完课程后,其实也是只吸收了百分之五十。还是要结合实际的业务场景,结合普通的写法去理解函数式编程以及流的威力