RxJava - 在已排序的已排放项目列表中添加标头

时间:2017-05-03 06:45:29

标签: rx-java rx-java2

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

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

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

逻辑如下:

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

我需要类似scan的内容,但操作符必须发出输入项+可选的标题项...

1 个答案:

答案 0 :(得分:2)

您可以使用滑动窗口缓冲并在重叠窗口上执行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);