2016-11-28 90 views
1

我試圖從here改變一個小反應堆樣本,我對我得到的行爲有點困惑。反應堆多次使用doOnNext

所以首先我這樣的代碼:

EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect(); 
    Flux<String> flux = stream 
      .doOnNext(s -> System.out.println("1 " + s)) 
      .doOnNext(s -> System.out.println("2 " + s)); 
    flux.subscribe(); 
    stream.onNext("Hello"); 

此代碼打印兩行預計:

1 Hello 
2 Hello 

但如果我加一箇中間varaible假裝我明白了一些方法或可讀性代碼開始表現不同。

EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect(); 
    Flux<String> flux = stream 
      .doOnNext(s -> System.out.println("1 " + s)); 
    flux .doOnNext(s -> System.out.println("2 " + s)); 
    flux.subscribe(); 
    stream.onNext("Hello"); 

因此,對於上面的代碼,我得到的只有一條線,那就是:

1 Hello 

任何人能解釋這種現象?

回答

1

感謝Stephane Maldini,我意識到Flux是不可變的,每個操作產生不同的流量。 討論是here