如何从第一个可观察物品中发出物品,然后从第二个可观察物品中发出4个物品?

时间:2017-03-26 19:50:17

标签: functional-programming rx-java rxjs reactive-programming rx-java2

假设我有两个数组列表,我想从第一个列表中发出一个项目,然后从第二个列表中发出4个项目,并将它们组合成第三个observable,它会发出此运算符的结果。如果第二个列表少于4个项目,则发出此列表中剩余的所有项目。enter image description here

O1:A,B,C,D
O2:1,2,3,4,5,6,7,8,9,10,11,12,13,14

结果将是:A1234 B5678 C9101112 D1314

1 个答案:

答案 0 :(得分:3)

Haven没有被编译器检查过,这只是我能想到的:

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属于同一类型。