Reactor 响应式编程 之 flatMap vs map 详解

本文详细解析了Reactor中map和flatMap的区别,包括它们的作用、同步与异步特性、方法签名以及实际应用示例。map主要用于单一对象转换,而flatMap则能将单个输入转换为多个输出并进行展平。flatMap在处理流时是异步非阻塞的,可能导致原始顺序丢失,适合需要扁平化处理的情况。理解两者的差异对于有效利用Reactor处理数据流至关重要。

1 作用不同

1.2 映射?展平?

  • map 只执行映射
  • flatMap 既执行映射,也执行展平

什么叫只能执行映射?

我理解是把一个数据执行一个方法,转换成另外一个数据。举个例子:mapper 函数把输入的字符串转换成大写。map()方法执行这个 mapper 函数。

Function<String, String > mapper = String::toUpperCase;
		Flux<String> inFlux = Flux.just("hello", ".", "com");
		Flux<String> outFlux = inFlux.map(mapper);
		// reactor 测试包提供的测试方法
		StepVerifier.create(outFlux)
				.expectNext("HELLO", ".", "COM")
				.expectComplete()
				.verify();

什么叫展平?

mapper 函数把字符串转成大写,然后分割成一个一个字符。

Function<String, Publisher<String>> mapper = s -> Flux.just(s.toUpperCase().split(""));

		Flux<String> inFlux = Flux.just("hello", ".", "com");
		// 这里只能使用 flatMap,因为参数是 Function<T, Publisher<V>> 形式
		Flux<String> outFlux = inFlux.flatMap(mapper);

		List<String> output = new ArrayList<>();
		outFlux.subscribe(out
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伍六七AI编程

你猜你给我1分我要不要

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

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

打赏作者

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

抵扣说明:

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

余额充值