SpringBoot3响应式编程----StreamAPI

系列文章目录

第一章 Jenkins搭建
Jenkins平台使用中的报错



前言

之前在使用springboot的过程中,使用的一直是servlet API的形式,进行项目框架搭建,并编写业务代码。如今在技术发展过程中,springboot3中提出了响应式编程模式(Reactive Stack),在这次技术整理的过程中,顺势进行相关知识的学习。用此文章进行一个笔记记录

在这里插入图片描述

一、什么是响应式编程

响应式编程是一款使用异步数据流编程的响应式编程思想,是基于观察者模型的这是大家的共识,它提供了非阻塞、异步的特性,便于处理异步情景,从而避免回调地狱和突破Future的局限性。

响应式编程 可以理解为:当某一主题发生改变时,观察此主题的观察者就会立刻收到通知并做出一系列响应。
可见,观察者模式的概念比较广,是“相应改变”,即只要变化了就行;而响应式编程必须得是“一系列响应"”,也就是不但要变化,还要像雪崩一样的触发连锁式变化,

举个响应式编程的例子:在一个“数据监控系统”中,如果“数据”发生了改变,就会触发一系列的变化:数据改变 ->Dao层做出响应(数据访问层)->Service层做出响应(业务逻辑层)->Controler做出响应(控制器)->Web页面做出相应(UI)。

二、函数式编程基础

对于一个函数的参数来讲,分为请求参数和返回参数。结合实际使用,就会存在以下几种情况:
1、有入参,有出参(Function)
Function
2、有入参,无出参(Consumer)
Consumer
3、无入参,有出参(Supplier)
Supplier

4、无出参,无入参(Runnable)
Runnable

三、StreamAPI

所有的for循环,都可以转换成Stream的形式
在这里插入图片描述

流程:
1、把数据封装成流;
2、定义流式操作
3、获取最终结果

先看一段简单,基础for循环的代码

// 从数组中获取最大的偶数
List<Integer> integers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// for循环
int max = 0;
for (Integer item : integers) {
    max = (item%2 == 0 && item > max) ? item : max;
}

按照以往的书写习惯,会通过遍历的方式,通过执行for循环,获取最大偶数
如果改成StreamAPI的方式,代码会变为以下形式:

integers.stream().filter(item -> {
            System.out.println("");
            return item % 2 == 0;
        });

其实从代码的角度来看,没有什么变化。
在这里插入图片描述
stream的核心中,其实还是一个遍历器,省区了我们书写for循环的代码。
但主要看流式编程的下一个方法filter
在这里插入图片描述
解析源码,可以看到,filter函数接收了一个函数式参数Predicate,这个其实是在之前四种函数式方法中未曾提到的一个类型。看源码:
在这里插入图片描述
针对Predicate,他存在一个入参T,但是这个函数的返回是一个boolean类型,就正像这个函数的翻译一般——断言
再来看流式操作中有以下几个内容

  • 一个数据源
  • 零/多个中间操作(一个流转换为另一个流)
  • 终止操作(产生最终结果)

需要注意的是,是惰性的,在未知性终止操作之前,是不会执行任何操作的。
在这里插入图片描述
可以看到,上述代码中,当执行了integerStream.collect()操作,才执行打印了filter中在控制台中输出的"-----"。然后再看所谓的collect()方法:
在这里插入图片描述
在源码中指出,此方法是一个终止操作:This is a terminal operation.
但其实在使用过程中会发现,所谓的中间操作,其实也是一个终止操作。他是将一个流管道进行执行,得到新的流管道,再执行其他终止操作。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值