当前位置: 首页 > wzjs >正文

个人做网站手机获取验证码建设集团摩托车

个人做网站手机获取验证码,建设集团摩托车,上海建筑网站建设,管理网站开发教程文章目录 一、创建操作符1. just —— 创建包含指定元素的流2. fromIterable —— 从集合创建 Flux3. empty —— 创建空的 Flux 或 Mono4. fromArray —— 从数组创建 Flux5. fromStream —— 从 Java 8 Stream 创建 Flux6. create —— 使用 FluxSink 手动发射元素7. generat…

文章目录

    • 一、创建操作符
      • 1. `just` —— 创建包含指定元素的流
      • 2. `fromIterable` —— 从集合创建 Flux
      • 3. `empty` —— 创建空的 Flux 或 Mono
      • 4. `fromArray` —— 从数组创建 Flux
      • 5. `fromStream` —— 从 Java 8 Stream 创建 Flux
      • 6. `create` —— 使用 FluxSink 手动发射元素
      • 7. `generate` —— 使用状态生成元素,适用于同步场景
      • 8. `fromFuture` —— 从 CompletableFuture 创建 Mono
      • 9. `interval` —— 创建周期性发射元素的 Flux
      • 10. `timer` —— 创建延迟发射的 Mono
    • 二、转换操作符
      • 1. `map` —— 映射每个元素为新值
      • 2. `flatMap` —— 扁平化异步流,将每个元素映射为异步 Publisher
      • 3. `concatMap` —— 顺序执行映射为 Publisher 的异步流
    • 三、过滤操作符
      • 1. `filter` —— 按条件过滤元素
      • 2. `take` —— 获取前 N 个元素
      • 3. `skip` —— 跳过前 N 个元素
    • 四、组合操作符
      • 1. `concat` —— 按顺序合并多个 Flux
      • 2. `merge` —— 并发合并多个 Flux(无序)
      • 3. `zip` —— 按索引组合多个 Flux 的元素
    • 五、错误处理操作符
      • 1. `onErrorReturn` —— 出错时返回默认值
      • 2. `onErrorResume` —— 出错时切换备用流
      • 3. `retry` —— 出错时重试指定次数
    • 六、延迟执行与懒加载:`Mono.defer` 和 `Flux.defer`:被订阅时才执行
      • `Mono.defer` —— 懒加载 Mono,直到subscribe时才创建执行
      • `Flux.defer` —— 懒加载 Flux,每次订阅时重新执行逻辑

Reactor 是一个用于构建反应式应用程序的 Java 库,提供了丰富的操作符(算子)来处理反应式流(FluxMono)。本文详细介绍了 Reactor 中常用的创建、转换、过滤、组合和错误处理操作符,以及一些高级用法示例。


一、创建操作符

1. just —— 创建包含指定元素的流

Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);
Mono<String> mono = Mono.just("Hello");

2. fromIterable —— 从集合创建 Flux

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Flux<Integer> flux = Flux.fromIterable(list);

3. empty —— 创建空的 Flux 或 Mono

Flux<Integer> emptyFlux = Flux.empty();
Mono<String> emptyMono = Mono.empty();

4. fromArray —— 从数组创建 Flux

Integer[] numbers = {1, 2, 3, 4, 5};
Flux<Integer> flux = Flux.fromArray(numbers);

5. fromStream —— 从 Java 8 Stream 创建 Flux

Stream<Integer> stream = Arrays.asList(1, 2, 3, 4, 5).stream();
Flux<Integer> flux = Flux.fromStream(stream);

6. create —— 使用 FluxSink 手动发射元素

Flux<Integer> flux = Flux.create(sink -> {for (int i = 0; i < 5; i++) {sink.next(i);}sink.complete();
});

7. generate —— 使用状态生成元素,适用于同步场景

Flux<Integer> flux = Flux.generate(() -> 0, (state, sink) -> {sink.next(state);if (state == 4) sink.complete();return state + 1;
});

8. fromFuture —— 从 CompletableFuture 创建 Mono

CompletableFuture<String> future = CompletableFuture.completedFuture("Hello");
Mono<String> mono = Mono.fromFuture(future);

9. interval —— 创建周期性发射元素的 Flux

Flux<Long> intervalFlux = Flux.interval(Duration.ofSeconds(1));

10. timer —— 创建延迟发射的 Mono

Mono<Long> timerMono = Mono.timer(Duration.ofSeconds(2));

 

二、转换操作符

1. map —— 映射每个元素为新值

Flux<Integer> squared = Flux.just(1, 2, 3).map(n -> n * n);

2. flatMap —— 扁平化异步流,将每个元素映射为异步 Publisher

Flux<Integer> result = Flux.just(1, 2, 3).flatMap(n -> Mono.just(n * 2));

3. concatMap —— 顺序执行映射为 Publisher 的异步流

Flux<Integer> result = Flux.just(1, 2, 3).concatMap(n -> Mono.just(n * 2));

 

三、过滤操作符

1. filter —— 按条件过滤元素

Flux<Integer> evens = Flux.just(1, 2, 3, 4).filter(n -> n % 2 == 0);

2. take —— 获取前 N 个元素

Flux<Integer> firstThree = Flux.just(1, 2, 3, 4, 5).take(3);

3. skip —— 跳过前 N 个元素

Flux<Integer> skipped = Flux.just(1, 2, 3, 4, 5).skip(2);

 

四、组合操作符

1. concat —— 按顺序合并多个 Flux

Flux<Integer> combined = Flux.concat(Flux.just(1, 2), Flux.just(3, 4));

2. merge —— 并发合并多个 Flux(无序)

Flux<Integer> merged = Flux.merge(Flux.just(1, 2), Flux.just(3, 4));

3. zip —— 按索引组合多个 Flux 的元素

Flux<String> zipped = Flux.zip(Flux.just(1, 2), Flux.just(3, 4), (a, b) -> a + ":" + b);

 

五、错误处理操作符

1. onErrorReturn —— 出错时返回默认值

Flux<Integer> result = Flux.just(1, 2, 3).map(n -> {if (n == 2) throw new RuntimeException("error");return n;}).onErrorReturn(-1);

2. onErrorResume —— 出错时切换备用流

Flux<Integer> result = Flux.just(1, 2, 3).map(n -> {if (n == 2) throw new RuntimeException("error");return n;}).onErrorResume(e -> Mono.just(-1));

3. retry —— 出错时重试指定次数

Flux<Integer> result = Flux.just(1, 2, 3).map(n -> {if (n == 2) throw new RuntimeException("error");return n;}).retry(2);

 

六、延迟执行与懒加载:Mono.deferFlux.defer:被订阅时才执行

Mono.defer —— 懒加载 Mono,直到subscribe时才创建执行

Mono<String> deferredMono = Mono.defer(() -> {System.out.println("Generating value...");return Mono.just("Deferred Result");
});

只有当 subscribe() 被调用时,Mono.defer 中的逻辑才会真正执行。这对于需要确保执行时机晚于前一步完成场景特别重要,比如:

Mono.defer(() -> readQaResultType()).subscribe(result -> System.out.println("QA Result: " + result));

在这段代码中,读取 qaResultType 的操作只会在前面的步骤(例如数据预处理)完全完成后才被触发

Flux.defer —— 懒加载 Flux,每次订阅时重新执行逻辑

Flux<Integer> deferredFlux = Flux.defer(() -> {System.out.println("Evaluating source...");return Flux.just(1, 2, 3);
});

每次订阅都会重新生成数据,适用于带有状态的源或依赖最新上下文的处理逻辑。



文章转载自:

http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://00000000.ypcxs.cn
http://www.dtcms.com/wzjs/600385.html

相关文章:

  • wordpress cpu占用高太原seo快速排名怎么样
  • 衡水网站制作公司怎么做直播网站
  • 爱设计作图优化一个网站
  • 湘潭网站建设方案咨询搜索企业信息的网站
  • dedecms旅游网站模板建筑设计装修
  • 代理充值平台网站电子商务网站建设卷子
  • 寮步建设网站jsp网站开发工资
  • 淘宝店网站怎么做永信南昌网站建设
  • 中国建设银行手机网站discuz与wordpress会员
  • 哪个推广网站好百度平台订单查询
  • 网站设计的硬件无需下载直接进入的app
  • 图书网站建设策划书1万字店铺名字设计logo
  • 在线设计平台行业概况seol英文啥意思
  • 专门做旅游的视频网站作图网站
  • 企业网站建设中期报告模板网页qq登陆保护怎么关
  • 温州做网站建设公司哪家好百度站长工具
  • 自己做免费网站联邦快递网站建设的目标
  • 苏州建设培训中心网站中国建设教育网官方网站
  • 南京网络建站公司app图片怎么制作
  • 天津百度做网站多少钱哈尔滨市网站建设
  • 长春企业网站建设外贸展示型模板网站模板
  • 网站建设合同内容厦门营销网站建设
  • 微信公众号网站开发本地调试做视频付费网站
  • 锤子网站cms版本天津滨海新区邮编
  • 中铁建设集团华东分公司网站建立网站的市场价格
  • 商城建站费用网络营销就是网络销售
  • python 做的网站成都住房和城乡建设厅官网
  • 六安市建设网站市场信息价新的网站怎么做seo
  • 购物网站排名2016上海网站制作公司哪
  • 2016企业网站模板中文网站的广告语应该怎么做