如何从第一个 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));
  1. buffer 第二个 Observable (你想要分 4 个的那个)
  2. zip 它与第一个 Observable,并从第 2
  3. 个创建一个 List<T>
  4. flatMapObservable<List<T>>改成Observable<T>
  5. 另请注意,我假设您的两个 Observable 属于同一类型。