【问题标题】:How to emit an item from first observable then 4 items from second observable?如何从第一个可观察对象发出一个项目,然后从第二个可观察对象发出 4 个项目?
【发布时间】:2017-03-26 19:50:17
【问题描述】:

假设我有两个数组列表,我想从第一个列表中发出一个项目,然后从第二个列表中发出 4 个项目,并将它们组合成第三个 observable,它发出此运算符的结果。如果第二个列表少于 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

【问题讨论】:

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


    【解决方案1】:

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

    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 创建单个 List&lt;T&gt;
    3. flatMapObservable&lt;List&lt;T&gt;&gt; 变成Observable&lt;T&gt;
    4. 另外请注意,我假设您的两个 Observables 属于同一类型。

    【讨论】:

    • 谢谢,如果列表 2 不再有 4 个要发出的项目,缓冲区 4 会起作用吗?
    • 当然只是阅读 buffer 的文档:buffer(count) 以列表的形式发出非重叠缓冲区,每个缓冲区最多包含来自源 Observable 的计数项(最终发出的 List 可能少于 count 个项目)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多