我有一个observable(dayListener)从服务器第一次订阅时发出100 - 300项(未确认可能不返回任何内容),然后在1小时后返回1项。每个项目的类型为 UserData
我想观察(dayListner)中的项目3秒并将其转换为List并存储它,然后继续观察单个项目的相同observable UserData
我无法弄清楚如何在rxjava 2中将observable转换为3秒,因为我无法为相同的observable返回两种类型, UserData 和 List ,所以我无法形成解决方案任何想法真的很感激!! ,我只是 rxjava 2
的新手答案 0 :(得分:1)
只需使用2个不同的Observable,您就可以听到2种不同类型的数据。
First Observable应该有3秒的限制:
firstListObservable = userSourceObservable
.takeUntil(Observable.timer(3, TimeUnit.SECONDS))
.toList()
然后你有其余值的Observable:
remainingValuesObservable = userSourceObservable
.skipUntil(Observable.timer(3, TimeUnit.SECONDS))
这是你想要的吗?
答案 1 :(得分:1)
你可以创建一个Pair类并使用Zip运算符将两个结果合并到一个emmited Item
中class Pair {
String a;
Integer b;
Pair(String a, Integer b) {
this.a = a;
this.b = b;
}
}
@Test
public void testZipDifferentTypes() {
Observable.zip(obA(), obB(), Pair::new)
.subscribe(System.out::println);
}
private Observable<String> obA() {
return Observable.just("hello");
}
private Observable<Integer> obB() {
return Observable.just(1);
}