函数式编程(笔记)

一、什么是函数式编程

函数式编程是一种是一种编程范式,它将计算视为函数的运算,并避免变化状态和可变数据。它是一种声明式编程范式,也就是说,编程是用表达式或声明而不是语句来完成的。

Lamda表达式:(a, b) -> a + b

比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。

二、函数式编程的几个特点

  • 纯函数
    • 函数的执行没有副作用
    • 返回值仅依赖于输入参数
  • 高阶函数
    • 函数的参数可以是一个/多个函数
    • 函数的返回值也可以是一个函数

Lamda表达式

箭头左边是参数列表,右边是函数体
方法引用class::method
在这里插入图片描述
在这里插入图片描述

三、流

可以将流想象成一个“水流管道”,水流就在这管道中形成了
数据好比水进入管道然后一步步加工过滤,消毒,煮沸 最后流出然后关闭管道
在这里插入图片描述

建立流的几种方式

  1. Arrays.stream .
    在这里插入图片描述
  2. Collection.stream
    在这里插入图片描述
  3. Stream.of
    在这里插入图片描述
  4. Stream.iterate
    在这里插入图片描述
  5. Stream.generate
    在这里插入图片描述
  6. StreamSupport.stream
    在这里插入图片描述
  7. IntStream
    在这里插入图片描述
  8. 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 作用类似
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值