Странное поведение next () в реактивной цепочке - PullRequest
0 голосов
/ 25 февраля 2019

Для начала вот мой код:

public static void main(String[] args) {
    List<String> l1 = Arrays.asList("737", "747");
    Flux<String> f1 = Flux.fromIterable(l1);

    List<String> l2 = Arrays.asList("757", "777");
    Flux<String> f2 = Flux.fromIterable(l1);

   f1.mergeWith(f2)
    .doOnNext(a -> System.out.println(a))
    .next()
    .subscribe(a -> System.out.println(a));
}

Вот вывод, который я ожидаю:

737

747

757

777

737

Как сказано в документации next(), требуется первыйelement, создает Mono из него и отменяет подписку.

Вывод, который я получаю:

737

737

1 Ответ

0 голосов
/ 25 февраля 2019

Как вы сказали, next() берет первый элемент потока и создает моно.Моно это 0 или 1 значение.Таким образом, при подписке вы получите только первое значение оригинального Flux.

Посмотрите на мрамор: next marble

Посмотрите, как полное излучение правильнопосле первого значения.

Итак, если мы применим это к вашему коду, у нас будет

737 -> 747 -> 757 -> 777 |

onNext

print 737

next()

737 -> |

subscribe()

print 737
...