Rx java RxJava-在已发出项的排序列表中添加标题

Rx java RxJava-在已发出项的排序列表中添加标题,rx-java,rx-java2,Rx Java,Rx Java2,假设我有一个项目列表并发出它: Observable<Item> items = Observable.fromIterable(list); Observable items=Observable.fromIterable(列表); 现在我想有第二个可观察的,插入头。是否必须插入标题可以通过比较两个连续的项目来决定。有什么办法吗 逻辑如下: 比较两个连续的项目 如果它们需要不同的标题,请在它们之间添加新的标题项 如果没有,则只发射项目 我需要类似于scan的东西,但操作员必

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

Observable<Item> items = Observable.fromIterable(list);
Observable items=Observable.fromIterable(列表);
现在我想有第二个可观察的,插入头。是否必须插入标题可以通过比较两个连续的项目来决定。有什么办法吗

逻辑如下:

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

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

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

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);
可观察。仅(1,3,4,5,7,8,10,12,14)
.缓冲区(2,1)
.flatMapIterable(v->{
如果(v.size()1){
返回数组.asList(v.get(0),1000);
}
返回集合。singletonList(v.get(0));
})
.subscribe(System.out::println);

谢谢,看起来很不错。我的假设是否正确:语句
if(v.size())用于最后一个项目,因为项目总数可能是奇数,
buffer
在这种情况下将发出一个1元素列表。