【问题标题】:RxJava - add headers in a sorted list of emitted itemsRxJava - 在发射项目的排序列表中添加标题
【发布时间】:2017-05-03 06:45:29
【问题描述】:

假设我有一个项目列表并发出它:

Observable<Item> items = Observable.fromIterable(list);

现在我想要第二个插入标题的 observable。是否必须插入标题可以通过比较两个连续的项目来决定。任何想法如何做到这一点?

逻辑如下:

  • 比较两个连续的项目
  • 如果他们需要不同的标题,请在它们之间添加一个新的标题项
  • 如果没有,就发出项目

我需要类似于 scan 的东西,但操作员必须发出输入项 + 可选标题项...

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

    您可以使用滑动窗口进行缓冲,并在重叠窗口上执行 flatMap 以在项目之间插入标题/分隔符:

    Observable.just(1, 3, 4, 5, 7, 8, 10, 12, 14)
    .buffer(2, 1)
    .flatMapIterable(v -> {
        if (v.size() <= 1) {
            return v;
        }
        if (v.get(1) - v.get(0) > 1) {
            return Arrays.asList(v.get(0), 1000);
        }
        return Collections.singletonList(v.get(0));
    })
    .subscribe(System.out::println);
    

    【讨论】:

    • 谢谢,看起来很不错。我的假设是真的吗:if (v.size() &lt;= 1) 的陈述对于第一项是正确的,对吗?
    • 它存在于最后一项,因为总的项目数可能是奇数,buffer 在这种情况下会发出一个 1 元素列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2012-01-11
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多