2015-03-10 5 views
3

Когда мы точно знаем, сколько наблюдаемыми у нас есть свои точные типы, и мы хотим, чтобы пронестись мы делаем как этотRxJava молния с vararg наблюдаемых

Observable<String> data1 = Observable.just("one", "two", "three", "four", "five"); 
Observable<String> data2 = Observable.just("one", "two", "three", "four", "five"); 
Observable<String> data3 = Observable.just("one", "two", "three", "four", "five"); 

Observable.zip(data1, data2, data3, (a, b, c) -> a + b + c); 

мы используем фиксированный рассуждение функциональный интерфейс, который принимает 3 аргумента ... и в этом случае он работает нормально.

, но если мы знаем, что у нас есть N номеров Observable<T>, где T - это тот же самый тип, как мы его застегнем? потребитель Funtion может быть то, что занимает T...

, но я не вижу какой-либо способ осуществить это ...

UPDATE

Практическая проблема, я пытаюсь решить здесь является то, что у меня есть некоторое количество из Observable<T> и я хочу forkJoin тех, и выбрал только один T в конце испускать ...

Представьте несколько наблюдаемых непосредственно излучающих T, что я хочу взять и сравнить и испускают только один с таким мне другой наблюдаемый ...

РЕШЕНИЕ

Как сказал в ответе есть зип, который принимает итератор и функцию, пример кода выглядит следующим образом

Observable<String> data1 = Observable.just("one", "two", "three", "four", "five"); 
Observable<String> data2 = Observable.just("one", "two", "three", "four", "five"); 
Observable<String> data3 = Observable.just("one", "two", "three", "four", "five"); 
List<Observable<String>> iter = Arrays.asList(data1, data2, data3); 

Observable.zip(iter, args1 -> args1).subscribe((arg)->{ 
    for (Object o : arg) { 
    System.out.println(o); 
    } 
}); 

, который будет производить

one 
one 
one 
two 
two 
two 
three 
three 
three 
four 
four 
four 
five 
five 
five 

ответ

3

Существует почтовый метод, который принимает Итерабельность. Это позволило бы использовать n Observables.

+0

Есть ли способ ограничить почтовый индекс временем? например, если первые два испущенных значения, но более секунды прошло, он отбрасывает текущий zip и ждет еще одной партии значений ...? в nutshel, чтобы убедиться, что все значения, которые прибыли, были в определенные сроки ... – vach

+0

Не знаю. Сожалею. : P –

+0

@vach Это интересный вопрос, смогли ли вы узнать, возможно ли это? – wkarl

Смежные вопросы