如何从第一个 observable 发射一个项目然后从第二个 observable 发射 4 个项目?
How to emit an item from first observable then 4 items from second observable?
假设我有两个数组列表,我想从第一个列表中发出一个项目,然后从第二个列表中发出 4 个项目,并将它们组合成第三个可观察对象,它发出此运算符的结果。如果第二个列表少于 4 个项目,则发出此列表中剩余的所有项目。
O1:A、B、C、D
O2:1,2,3,4,5,6,7,8,9,10,11,12,13,14
所以结果将是:A1234 B5678 C9101112 D1314
还没有经过编译器检查,这只是我能想到的:
Observable<T> o1 = ...
Observable<T> o2 = ...
Observable<T> o3 = o1.zip(o2.buffer(4), (a, b) -> {
List<T> contents = new ArrayList<>();
contents.add(a);
contents.addAll(b);
return contents;
}).flatMap(list -> Observable.from(list));
buffer
第二个 Observable
(你想要分 4 个的那个)
zip
它与第一个 Observable
,并从第 2 个创建一个 List<T>
flatMap
把Observable<List<T>>
改成Observable<T>
- 另请注意,我假设您的两个
Observable
属于同一类型。
假设我有两个数组列表,我想从第一个列表中发出一个项目,然后从第二个列表中发出 4 个项目,并将它们组合成第三个可观察对象,它发出此运算符的结果。如果第二个列表少于 4 个项目,则发出此列表中剩余的所有项目。
O1:A、B、C、D
O2:1,2,3,4,5,6,7,8,9,10,11,12,13,14
所以结果将是:A1234 B5678 C9101112 D1314
还没有经过编译器检查,这只是我能想到的:
Observable<T> o1 = ...
Observable<T> o2 = ...
Observable<T> o3 = o1.zip(o2.buffer(4), (a, b) -> {
List<T> contents = new ArrayList<>();
contents.add(a);
contents.addAll(b);
return contents;
}).flatMap(list -> Observable.from(list));
buffer
第二个Observable
(你想要分 4 个的那个)zip
它与第一个Observable
,并从第 2 个创建一个 flatMap
把Observable<List<T>>
改成Observable<T>
- 另请注意,我假设您的两个
Observable
属于同一类型。
List<T>