Concat
выводить выбросы из двух или более Observable без переплетения их
Оператор Concat конкатенирует вывод нескольких Observable, так что они ведут себя как одно Observable, при этом все элементы, выводимые первым Observable, выводятся до любых элементов, выводимых вторым Observable (и так далее, если их больше двух).
Concat ожидает подписки на каждое дополнительное Observable, которое вы передаете ему, до завершения предыдущего Observable. Обратите внимание, что из-за этого, если вы пытаетесь конкатенировать «горячее» Observable, то есть такое, которое начинает выводить элементы сразу и до того, как к нему подключаются, Concat не увидит и, следовательно, не выведет никакие элементы, которые Observable выведет до того, как все предыдущие Observable завершатся и Concat подпишется на «горячее» Observable.
В некоторых реализациях ReactiveX также есть оператор ConcatMap (также известный как concat_all, concat_map, concatMapObserver, for, forIn/for_in, mapcat, selectConcat, или selectConcatObserver) , который преобразует элементы, выводимые исходным Observable, в соответствующие Observable, а затем конкатенирует элементы, выводимые каждым из этих Observable в порядке их наблюдения и преобразования.
Оператор StartWith похож на Concat, но добавляет, а не добавляет, элементы или выбросы элементов к тем, которые выводит исходное Observable.
Оператор Merge также похож. Он объединяет выбросы двух или более Observable, но может их переплетать, в то время как Concat никогда не переплетает выбросы от нескольких Observable.
См. также
- Catch
- Merge
- StartWith
- Введение в Rx: Concat
- RxMarbles:
concat - 101 Rx Samples: Concat — холодное observable
- 101 Rx Samples: Concat — горячее observable
- Загрузка данных из нескольких источников с RxJava Дэна Лева (пример с использованием Concat и First)
Информация, специфичная для языка
RxClojure concat concat*
В RxClojure concat соединяет несколько отдельных Observable-объектов в заданном порядке.
Оператор concat* соединяет Observable-объекты, испускаемые другим Observable-объектом, в порядке их испускания.
RxCpp concat
RxCpp реализует этот оператор как concat:
RxGroovy concat concatWith
RxGroovy реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.
Пример кода
odds = Observable.from([1, 3, 5, 7]);
evens = Observable.from([2, 4, 6]);
Observable.concat(odds, evens).subscribe(
{ println(it); }, // onNext
{ println("Error: " + it.getMessage()); }, // onError
{ println("Sequence complete"); } // onCompleted
); 1 3 5 7 2 4 6 Sequence complete
- Javadoc:
concat(Observable<Observable>) - Javadoc:
concat(Observable,Observable)(также существуют версии, принимающие до девяти Observable-объектов)
Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).
- Javadoc:
concatWith(Observable)
RxJava 1․x concat concatWith
RxJava реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.
- Javadoc:
concat(Observable<Observable>) - Javadoc:
concat(Observable,Observable)(также существуют версии, принимающие до девяти Observable-объектов)
Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).
- Javadoc:
concatWith(Observable)
RxJS concat concatAll
RxJS реализует этот оператор как concat и concatAll.
concat принимает переменное число Observable-объектов (или Promise) в качестве параметров (или один массив Observable-объектов или Promise) и соединяет их в порядке указания в списке параметров (или массиве). Он существует как метод прототипа Observable, так и как метод экземпляра.
concatAll — это метод экземпляра, который работает с Observable-объектом Observable-объектов, соединяя каждый из этих Observable-объектов в порядке их испускания.
concat и concatAll можно найти в каждом из следующих дистрибутивов:
rx.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
RxKotlin concat concatWith
RxKotlin реализует этот оператор как concat. Существуют варианты этого оператора, принимающие от двух до девяти Observable-объектов в качестве параметров и соединяющие их в порядке указания в списке параметров. Также есть вариант, принимающий Observable-объект Observable-объектов и соединяющий каждый из этих Observable-объектов в порядке их испускания.
Также есть метод экземпляра concatWith, такой, что Observable.concat(a,b) эквивалентно a.concatWith(b).
RxNET Concat
Rx.NET реализует этот оператор как Concat. Он принимает либо перечислимый список Observable-объектов, либо Observable-объект Observable-объектов, либо два Observable-объекта в качестве параметров и соединяет их в заданном порядке.
RxPHP concat concatAll
RxPHP реализует этот оператор как concat.
Объединяет последовательность observable-объектов в конец исходного observable-объекта.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/concat/concat.php $source1 = \Rx\Observable::of(42); $source2 = \Rx\Observable::of(56); $source = \Rx\Observable::empty()->concat($source1)->concat($source2); $subscription = $source->subscribe($stdoutObserver);
Next value: 42 Next value: 56 Complete!
RxPHP также имеет оператор concatAll.
Объединяет последовательность observable-объектов в один observable-объект.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/concat/concatAll.php
$source = Rx\Observable::range(0, 3)
->map(function ($x) {
return \Rx\Observable::range($x, 3);
})
->concatAll();
$subscription = $source->subscribe($stdoutObserver); Next value: 0 Next value: 1 Next value: 2 Next value: 1 Next value: 2 Next value: 3 Next value: 2 Next value: 3 Next value: 4 Complete!
RxPY concat concatAll
В RxPY concat принимает переменное количество Observable-объектов в качестве параметров (или массив Observable-объектов) и объединяет их в порядке, заданном в списке параметров (или массиве).
concatAll работает с Observable-объектом Observable-объектов, объединяя каждый из этих Observable-объектов в порядке их испускания.
Rxrb concat merge_all
В Rx.rb оператор concat работает с двумя Observable-объектами как оператор экземпляра или с массивом Observable-объектов как метод класса.
Оператор merge_all несмотря на название, по сути, ведет себя как вариант Concat в Rx.rb. Он принимает Observable-объект Observable-объектов в качестве параметра и объединяет испускания этих Observable-объектов.
RxScala concat ++
RxScala реализует этот оператор двумя способами. Существует оператор concat, который принимает Observable-объект Observable-объектов в качестве параметра и объединяет каждый из этих Observable-объектов в порядке их испускания. Также есть оператор ++, который объединяет один Observable-объект с другим.
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/concat.html