RxJava - 在已排序的已发出项目列表中添加 headers

RxJava - add headers in a sorted list of emitted items

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

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

现在我想要第二个可插入 headers 的可观察对象。是否必须插入header可以通过比较两个连续的项目来决定。有什么想法吗?

逻辑如下:

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

您可以使用滑动 window 进行缓冲,并在重叠 windows 上执行 flatMap 以在项目之间插入 headers/separators:

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);