Как использовать Observable zip в Java 8 - PullRequest
0 голосов
/ 05 мая 2020

Недавно я столкнулся с некоторыми кодами, которые используют следующую функцию, но мне трудно понять, как использовать эту функцию.

zip(java.lang.Iterable<? extends Observable<?>> ws, FuncN<? extends R> zipFunction)

Для java do c он сказал, что это означает «Возвращает Observable, который генерирует результаты указанной функции объединителя, применяемой к комбинациям элементов, испускаемых последовательно, Iterable of other Наблюдаемые. ". Я прочитал это несколько раз, но до сих пор не могу понять, что это значит.

И я также читал, что сама функция zip означает «объединить выбросы нескольких Observable вместе с помощью указанной функции и выдать отдельные элементы для каждой комбинации на основе результатов этой функции».

Сначала я думал, что знаю, что делает zip, но, прочитав это, я запутался. Разве функция zip не вернет только одно значение, почему это «... для каждой комбинации, основанной на результатах этой функции»? функция, а также застежка-молния в общем значат?

1 Ответ

1 голос
/ 05 мая 2020

Вот пример:

Observable X представляет последовательность a, b, c.

Observable Y представляет собой последовательность α, β, γ.

Сжатие наблюдаемых X и Y с использованием функции f возвращает новую наблюдаемую, которая представляет последовательность f(a, α), f(b, β), f(c, γ).

Если вам нужен еще более конкретный пример,

Observable X представляет последовательность 2, 3, 4.

Observable Y представляет собой последовательность 5, 6, 7.

Сжатие наблюдаемых X и Y с использованием функции "умножения" возвращает новую наблюдаемую, которая представляет последовательность 10, 18, 28.

В JavaDo c «указанная функция объединителя» относится к функции f. Фраза «указанная функция» во втором процитированном вами слове также относится к этому. Обратите внимание, как эта функция объединяет несколько элементов, по одному от каждого наблюдаемого (например, 2 и 5), в один элемент в возвращаемом наблюдаемом (например, 10).

«Комбинация» в обоих JavaDo c и второе, что вы процитировали, относятся к кортежам элементов из каждого наблюдаемого, которое вы архивируете, например (2, 5) или (3, 6).

Обратите внимание, что zip возвращает один единственный Observable объект, который представляет собой последовательность значений. JavaDo c описывает этот единственный объект Observable, тогда как второе, что вы процитировали, описывает последовательность , представленную объектом Observable (отсюда и формулировка «для каждой комбинации»). Возможно, именно поэтому вы неправильно поняли второй отрывок, в котором говорится, что zip возвращает несколько значений. Оба отрывка говорят правду, но описывают разные вещи.

Повторяю: zip возвращает одиночный Observable объект, который представляет последовательность значения.

...