首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flux.concat与Flux.concatWith的区别

Flux.concat与Flux.concatWith的区别
EN

Stack Overflow用户
提问于 2018-01-02 10:52:44
回答 1查看 6K关注 0票数 2

我对反应性流很陌生,我学习使用concat/串联using方法将两个发布者(Flux是特定的)结合在一起。

我可以用concat方法做的所有事情,同样可以使用concatWith方法来实现。下面是我使用的示例案例:

代码语言:javascript
复制
        Mono<String> mono1 = Mono.just(" karan ");
        Mono<String> mono2 = Mono.just(" | verma ");
        Mono<String> mono3 = Mono.just(" | kv ");

        Flux<String> flux1 = Flux.just(" {1} ","{2} ","{3} ","{4} " );
        Flux<String> flux2 = Flux.just(" |A|"," |B| "," |C| ");

        // FLux emits item each 500ms
        Flux<String> intervalFlux1 = Flux.interval(Duration.ofMillis(1000))
                                        .zipWith(flux1, (i, string) -> string);

        // FLux emits item each 700ms       
        Flux<String> intervalFlux2 = Flux
                                .interval(Duration.ofMillis(1000))
                                .zipWith(flux2, (i, string) -> string);



        System.out.println("**************Flux Concat***************");
        Flux.concat(mono1, mono2, mono3).subscribe(System.out::print);
        System.out.println();
        Flux.concat(flux2, flux1).subscribe(System.out::print);
        System.out.println();
        Flux.concat(intervalFlux2, flux1).subscribe(System.out::print);

        Thread.sleep(5000);

        System.out.println();
        Flux.concat(intervalFlux2, intervalFlux1).subscribe(System.out::print);
        Thread.sleep(10000);
        System.out.println("----------------------------------------");


        System.out.println("**************Flux Concat with***************");
        mono1.concatWith(mono2).concatWith(mono3).subscribe(System.out::print);
        System.out.println();
        flux1.concatWith(flux2).subscribe(System.out::print);

        System.out.println();
        intervalFlux1.concatWith(flux2).subscribe(System.out::print);
        Thread.sleep(5000);

        System.out.println();
        intervalFlux1.concatWith(intervalFlux2).subscribe(System.out::print);
        Thread.sleep(10000);
        System.out.println();

        System.out.println("----------------------------------------");

以下是这两种情况的输出:

代码语言:javascript
复制
**************Flux Concat***************
 karan  | verma  | kv 
 |A| |B|  |C|  {1} {2} {3} {4} 
 |A| |B|  |C|  {1} {2} {3} {4} 
 |A| |B|  |C|  {1} {2} {3} {4} ----------------------------------------
**************Flux Concat with***************
 karan  | verma  | kv 
 {1} {2} {3} {4}  |A| |B|  |C| 
 {1} {2} {3} {4}  |A| |B|  |C| 
 {1} {2} {3} {4}  |A| |B|  |C| 
----------------------------------------

两种情况下的时间复杂度也是相似的。

这两者有什么区别呢?当应该使用concat或concatWith时,是否有特定的条件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 13:41:02

它们是等价的

Java要求所有代码都是类的一部分,所以不能仅仅将Flux concat(Flux, Flux)作为一个自由函数,而imo将是最不容易混淆的函数。

有些人更喜欢“总是成员函数”,另一些人更喜欢“接受两个(或更多)相同类的静态函数”。

第三种选择是表单Flux::Flux(Flux, Flux) (或Flux::Flux(Flux[]))的构造函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48059624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档