代码之家  ›  专栏  ›  技术社区  ›  user3139545

反应器3通过map函数创建单空

  •  0
  • user3139545  · 技术社区  · 5 年前

    a中的返回值应该是什么 map 函数be用于生成的单声道 MonoEmpty ?

    例子:

    Mono<Void> empty = Mono.just("ping").map(s-> ????);
    

    或者模式应该是做一个 flatMap 如果我需要这个功能?

    Mono<Void> empty = Mono.just("ping").flatMap(s-> Mono.empty());
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   Simon Baslé    5 年前

    如果您需要在大部分时间进行转换,但在某些情况下转换为空,请使用 handle (具有映射到零的能力,而无需 flatMap ):

    Mono<String> emptyIfNotPing = Mono.just("ping")
            .handle((t, sink) -> {
                if (t.equals("ping")) sink.next("pong");
                else sink.complete();
            });
    

    如果你 关心元素,只想传播终端信号( onComplete onError ),你可以使用 ignoreElement (维护泛型类型)或 then() (它变成了一个 Mono<Void>

    Mono<String> source = Mono.just("foo");
    Mono<Void> emptyWithTypeLoss = source.then();
    Mono<String> emptyWithoutTypeLoss = source.ignoreElement();