Project Reactor展开方法

最近,我的一位同事向我介绍了Project Reactor类型的expand运算符,在这篇文章中,我想介绍几种使用它的方式。

展开分页结果

考虑在名为City的模型上基于Spring Data的存储库:

 import org.springframework.data.jpa.repository.JpaRepository;  import samples.geo.domain.City;  public interface CityRepo extends JpaRepository<City, Long> {  } 

该存储库提供了一种检索分页结果的方法,大致如下:

 cityRepo.findAll(PageRequest.of( 0 , 5 )) 

现在,如果我要将多个页面展开到一个结果中,执行此操作的方法将是以下一种循环:

 var pageable: Pageable = PageRequest.of( 0 , 5 )  do { var page: Page<City> = cityRepo.findAll(pageable) page.content.forEach { city -> LOGGER.info( "City $city" ) } pageable = page.nextPageable()  } while (page.hasNext()) 

可以使用Reactor expand运算符通过以下方式完成分页结果的等效展开:

 val result: Flux<City> = Mono .fromSupplier { cityRepo.findAll(PageRequest.of( 0 , 5 )) } .expand { page -> if (page.hasNext()) Mono.fromSupplier { cityRepo.findAll(page.nextPageable()) } else Mono.empty() } .flatMap { page -> Flux.fromIterable(page.content) }  result.subscribe( { page -> LOGGER.info( "City ${page}" ) }, { t -> t.printStackTrace() }  ) 

在这里,结果的第一页扩展到第二页,第二页扩展到第三页,依此类推,直到没有要检索的页面为止。

遍历一棵树

考虑以下模型表示的树结构中的节点:

 data class Node( val id: String, val nodeRefs: List<String>,  ) 

样本数据如下所示:

可以使用如下所示的调用遍历:

 val rootMono: Mono<Node> = nodeService.getNode( "1" )  val expanded: Flux<Node> = rootMono.expand { node -> Flux.fromIterable(node.childRefs) .flatMap { nodeRef -> nodeService.getNode(nodeRef) }  }  expanded.subscribe { node -> println(node) } 

这是广度优先的扩展,输出如下所示:

 Node- 1  Node- 1 - 1  Node- 1 - 2  Node- 1 - 1 - 1  Node- 1 - 1 - 2  Node- 1 - 2 - 1  Node- 1 - 2 - 2 

expandDeep变体将深度优先遍历

翻译自: https://www.javacodegeeks.com/2020/02/project-reactor-expand-method.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同时买票是怎么实现的_去巴黎玩怎么买地铁票最划算?| 巴黎最全交通攻略

次票、天票、机场票……傻傻分不清楚。不会法语怎么办&#xff1f;什么时候买有优惠&#xff1f;看这一篇全知道​​巴黎作为国际大都市&#xff0c;交通还是非常方便的。基本上80%的巴黎景点都能坐地铁到达&#xff0c;就在我们平常所说的小巴黎里。整个巴黎岛&#xff08;Ile…

php输入地址查询,PHP查询用户IP所在地址

原创内容&#xff0c;转载请注明出处&#xff1a;https://www.myzhenai.com.cn/post/3042.html关键词&#xff1a;IP所在地址 IP地址 PHP获取ip地址相关内容&#xff1a;获取IP所处位置的Shell代码&#xff1a;https://www.myzhenai.com.cn/post/2917.htmlWordPress获取当前浏览…

javafx css_JavaFX技巧13:研究Modena CSS文件

javafx css到目前为止&#xff0c;这是最简单&#xff0c;最短的提示。 如果要执行以下任何操作&#xff1a; 了解如何使用CSS 使您的自定义控件看起来像标准控件 重用标准控件使用的SVG路径图形&#xff08;例如&#xff0c;滚动条箭头&#xff09; 弄清楚如何浏览标准控件…

python彩票数据分析案例_天津Python人工智能课程

Python人工智能课程介绍人工智能主要致力于计算机视觉&#xff0c;自然语言处理与语音识别三大领域&#xff01;其基础与核心都是机器学习&#xff0c;当下AI时代各大行业巨头公司都在争相追逐这些热门领域&#xff0c;创业公司更是层出不穷&#xff0c;人工智能工程师的需求量…

swig模板 PHP,如何使用nodejs前端模板引擎swig

这次给大家带来如何使用nodejs前端模板引擎swig&#xff0c;使用nodejs前端模板引擎swig的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。相对于jade&#xff0c;我还是更喜欢swig前端模板引擎&#xff0c;jade虽然语法简练高效了不少&#xff0c;但是…

jaxb_JAXB –新手的观点,第2部分

jaxb在本系列的第1部分中&#xff0c;我讨论了使用JAXB和JPA将数据从XML文件加载到数据库中的基础知识。 &#xff08;如果需要使用JSON而不是XML&#xff0c;则相同的想法应转化为类似Jackson的工具。&#xff09;该方法是使用共享域对象&#xff0c;即&#xff0c;一组带有描…

redis是什么_什么是Redis?为什么我们要用Redis?

前言当结束Java和数据库的学习以后&#xff0c;你就会接触到Redis这个词&#xff0c;我第一次听到的时候脑海里就会浮现这两个问题&#xff1a;什么是Redis&#xff1f;为什么我们要用Redis&#xff1f;我了解完以后&#xff0c;写出来帮助大家能够更快的认识它。我们先来看它的…

php strpos无效,簡單的PHP strpos功能不起作用,為什么?

Why isnt this standalone code working:為什么這個獨立代碼不起作用&#xff1a;$link https://google.com;$unacceptables array(https:,.doc,.pdf, .jpg, .jpeg, .gif, .bmp, .png);foreach ($unacceptables as $unacceptable){if (strpos($link, $unacceptable) true) {…

java基准测试_星期五基准功能Java

java基准测试让我们的产品所有者有一天变得疯狂&#xff0c;并要求您执行以下操作&#xff1a; From a set of Strings as follows : “ marco_8”&#xff0c;“ john_33”&#xff0c;“ marco_1”&#xff0c;“ john_33”&#xff0c;“ thomas_5”&#xff0c;“ john_3…

python2048游戏代码_【Python】用Python实现2048小游戏(源代码,1.0版本)

#2048 用python实现import randomimport mathimport osglobal scorescore 0def start():#开始a [[0 for i in range(4)] for i in range(4)] #构造一个4*4的列表i random.randint(0,3)j random.randint(0,3)p2 random.random()if p2>0.9: a[i][j] 4 #有0.9几率出现2el…

性能php 教程,提高PHP性能效率的几个技巧

如何提高效率问题&#xff0c;往往同样的功能&#xff0c;不一样的代码&#xff0c;出来的效率往往大不一样。● 用单引号代替双引号来包含字符串&#xff0c;这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量&#xff0c;单引号则不会&#xff0c;注意&#xff1a;…

oop 类和对象的_实用程序类的OOP替代

oop 类和对象的实用程序类&#xff08;也称为帮助程序类&#xff09;是仅具有静态方法且不封装状态的“结构”。 StringUtils &#xff0c; IOUtils &#xff0c; FileUtils从Apache的共享 ; Guava的 Iterables和Iterators以及JDK7的Files是实用程序类的完美示例。 这种设计思…

python读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现

异常可以防止出现一些不友好的信息返回给用户&#xff0c;有助于提升程序的可用性&#xff0c;在java中通过try ... catch ... finally来处理异常&#xff0c;在Python中通过try ... except ... else来处理异常一、以ZeroDivisionError为例&#xff0c;处理分母为0的除法异常de…

python from numpy import,python zeros()使用(from numpy import *)-Go语言中文社区

参考&#xff1a;############################################################函数zeros()在模块numpy中&#xff1a;from numpy import *help(zeros)该函数功能是创建给定类型的矩阵&#xff0c;并初始化为0参数简洁&#xff1a;shape&#xff1a;可以是int类型数据&#x…

OCA第5部分中的Java难题

在Java Puzzlers系列的第五部分中&#xff0c;我们将看到与X.parseX&#xff08;String s&#xff09;方法相关的内容。 您可以看到我们对X.parseX&#xff08;&#xff09;方法的期望。 public class Puzzler { public static void main(String[] args){ int i Integer.pars…

sqlmap绕过d盾_Waf功能、分类与绕过

## 一. waf工作原理Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。常见的系统攻击分为两类&#xff1a;- 一是利用Web服务器的漏洞进行攻击&#xff0c;如DDOS攻击、病毒木马破坏等攻击&#xff1b;- 二是利用网页自身的安全漏洞进…

maven的常见问题_Maven常见问题和陷阱

maven的常见问题喜欢它还是讨厌它&#xff08;很多人似乎都讨厌它&#xff09;&#xff0c; Maven是64&#xff05;的Java开发人员广泛使用的工具&#xff08;来源– 2014年Java工具和技术前景 &#xff09;。 大多数经验丰富的开发人员已经对Maven感到头疼。 通常以困难的方式…

matlab graphic,Matlab图形系统,Matlab Graphic System,音标,读音,翻译,英文例句,英语词典...

Image:114994698204558.jpgmatlabmatlab是矩阵实验室(matrix laboratory)之意。除具备卓越的数值计算能力外&#xff0c;它还提供了专业水平的符号计算&#xff0c;文字处理&#xff0c;可视化建模仿真和实时控制等功能。matlab的基本数据单位是矩阵&#xff0c;它的指令表达式…

python调用opengl_Python运行OpenGL示例

说明python的opengl库叫PyOpenGL&#xff0c;安装这个库的时候要注意位数版本要正确&#xff0c;比如我的python37是32位的&#xff0c;安装PyOpenGL-3.1.5-cp37-cp37m-win32.whl才行&#xff0c;默认pip安装的运行时可能会有问题&#xff0c;所以需要手动下载安装对应版本的wh…

php内置的数组函数大全,php数组的内置函数大全

1.array_change_key_case($arr,CASE_UPPER/CASE_LOWER)将$arr的键值转换为大写或者小写2.array_combine($arr1, $arr2) $arr1的值作为键,$arr2作为值生成后返回新的数组3.array_key_exists(‘key’, $arr)$arr中是否存在key&#xff0c;如果存在返回true&#xff0c;如果不存在…