Объединение
Объединяет элементы, испускаемые двумя Observable, всякий раз, когда элемент из одного Observable испускается в течение временного интервала, определенного элементом, испускаемым другим Observable
Оператор Join объединяет элементы, испускаемые двумя Observable, и выбирает, какие элементы объединить, на основе временных окон, которые вы определяете на основе каждого элемента. Вы реализуете эти окна как Observable, чьи жизненные циклы начинаются с каждого элемента, испускаемого одним из Observable. Когда такое Observable, определяющее окно, испускает элемент или завершается, окно для ассоциированного с ним элемента закрывается. Пока окно элемента открыто, он будет объединяться с любым элементом, испускаемым другим Observable. Вы определяете функцию, посредством которой элементы объединяются.
Большинство реализаций ReactiveX, имеющие оператор Join, также имеют оператор GroupJoin, который похож, за исключением того, что функция, которую вы определяете для объединения элементов, испускаемых двумя Observable, сопоставляет отдельные элементы, испускаемые исходным Observable, не с элементом из второго Observable, а с Observable, который испускает элементы из второго Observable, попадающие в то же окно.
См. также
- CombineLatest
- Zip
- Введение в Rx: Объединение
- Введение в Rx: Групповое объединение
- 101 Примеры Rx: Групповое объединение — Объединение двух потоков по соответствию одному из их атрибутов
Сведения о языке
RxGroovy join groupJoin
Оператор join принимает четыре параметра:
- второе Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, чья продолжительность жизни определяет длительность, в течение которой этот элемент будет объединяться с элементами из второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, чья продолжительность жизни определяет длительность, в течение которой этот элемент будет объединяться с элементами из первого Observable
- функцию, которая принимает элемент из первого Observable и элемент из второго Observable и возвращает элемент, который будет испускаться Observable, возвращаемым из
join
join по умолчанию не работает с конкретным Scheduler.
- Javadoc:
Join(Observable,Func1,Func1,Func2)
Оператор groupJoin принимает четыре параметра:
- второе Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, чья продолжительность жизни определяет длительность, в течение которой этот элемент будет объединяться с элементами из второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, чья продолжительность жизни определяет длительность, в течение которой этот элемент будет объединяться с элементами из первого Observable
- функцию, которая принимает элемент из первого Observable и Observable, испускающее элементы из второго Observable, и возвращает элемент, который будет испускаться Observable, возвращаемым из
groupJoin
groupJoin по умолчанию не работает с конкретным Scheduler.
Обратите внимание, что в необязательном классе StringObservable также есть оператор join. Он преобразует Observable, испускающее последовательность строк, в Observable, испускающее одну строку, которая объединяет их все, разделяя их указанным символом-разделителем.
RxJava 1․x join groupJoin
Оператор join принимает четыре параметра:
- второй Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами первого Observable
- функцию, которая принимает элемент из первого Observable и элемент из второго Observable и возвращает элемент, который будет испущен Observable, возвращаемым из
join
Оператор join по умолчанию не работает с каким-либо конкретным Scheduler.
- Javadoc:
Join(Observable,Func1,Func1,Func2)
Оператор groupJoin принимает четыре параметра:
- второй Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами первого Observable
- функцию, которая принимает элемент из первого Observable и Observable, испускающий элементы из второго Observable, и возвращает элемент, который будет испущен Observable, возвращаемым из
groupJoin
Оператор groupJoin по умолчанию не работает с каким-либо конкретным Scheduler.
Обратите внимание, что в дополнительном классе StringObservable также есть оператор join. Он преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, которая конкатенирует все строки, разделяя их указанным разделителем строк.
RxJS join groupJoin
Оператор join принимает четыре параметра:
- второй Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами первого Observable
- функцию, которая принимает элемент из первого Observable и элемент из второго Observable и возвращает элемент, который будет испущен Observable, возвращаемым из
join
Пример кода
var xs = Rx.Observable.interval(100)
.map(function (x) { return 'first' + x; });
var ys = Rx.Observable.interval(100)
.map(function (x) { return 'second' + x; });
var source = xs
.join(
ys,
function () { return Rx.Observable.timer(0); },
function () { return Rx.Observable.timer(0); },
function (x, y) { return x + y; }
)
.take(5);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: first0second0 Next: first1second1 Next: first2second2 Next: first3second3 Next: first4second4 Completed
Оператор groupJoin принимает четыре параметра:
- второй Observable для объединения с исходным Observable
- функцию, которая принимает элемент из исходного Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами второго Observable
- функцию, которая принимает элемент из второго Observable и возвращает Observable, срок действия которого управляет продолжительностью объединения этого элемента с элементами первого Observable
- функцию, которая принимает элемент из первого Observable и Observable, испускающий элементы из второго Observable, и возвращает элемент, который будет испущен Observable, возвращаемым из
groupJoin
Пример кода
ar xs = Rx.Observable.interval(100)
.map(function (x) { return 'first' + x; });
var ys = Rx.Observable.interval(100)
.map(function (x) { return 'second' + x; });
var source = xs.groupJoin(
ys,
function () { return Rx.Observable.timer(0); },
function () { return Rx.Observable.timer(0); },
function (x, yy) {
return yy.select(function (y) {
return x + y;
})
}).mergeAll().take(5);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: first0second0 Next: first1second1 Next: first2second2 Next: first3second3 Next: first4second4 Completed
Операторы join и groupJoin присутствуют в каждом из следующих распределений:
rx.all.jsrx.all.compat.jsrx.coincidence.js
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/join.html