project reactor

project reactor (2)

以编程方式创建序列

同步 generate

以编程方式创建Flux的最简单形式是通过generate方法,该方法带有一个generator函数。

这用于同步发射和一对一发射,这意味着接收器是SynchronousSink,并且其next()方法在每次回调调用中最多只能调用一次。 然后,可以另外调用error(Throwable)或complete(),但这是可选的。

简单示例:

Flux<String> flux = Flux.generate(
				// 提供初始状态值0。
                () -> 0,
                (state, sink) -> {
                	// 我们使用状态来选择要发出的信号(乘法表3中的一行)。
                    sink.next("3 x " + state + " = " + 3*state);
                    if (state == 5) {
                    	// 选择何时停止。
                        sink.complete();
                    }
                    // 返回在下一个调用中使用的新状态(除非序列在此调用中终止)。
                    return state + 1;
                });
flux.subscribe(System.out::println);

输出:

3 * 0 = 0
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15

或者使用可变的 < s > 例如,可以使用单个AtomicLong作为状态来重写上面的示例,并在每个回合中对其进行更改:

Flux<String> flux = Flux.generate(
                AtomicLong::new,
                (state, sink) -> {
                	// 元子类递增
                    long i = state.getAndIncrement();
                    sink.next("3 * " + i + " = " + 3*i);
                    if (i == 5) {
                        sink.complete();
                    }
                    return state;
                });
flux.subscribe(System.out::println);

包含Consumer 的 generate:

Flux<String> flux = Flux.generate(
                AtomicLong::new,
                (state, sink) -> {
                    long i = state.getAndIncrement();
                    sink.next("3 * " + i + " = " + 3*i);
                    if (i == 5) {
                        sink.complete();
                    }
                    return state;
                },
                // 我们将最后一个状态值(6)视为此Consumer lambda的输出。
                (state) -> System.out.println("state: " + state)
        );
        flux.subscribe(System.out::println);

输出:

3 * 0 = 0
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
state: 6

如果状态包含在过程结束时需要处理的数据库连接或其他资源,则使用者lambda可以关闭该连接或以其他方式处理应在过程结束时完成的任何任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值