RxJava - 在已排序的已发出项目列表中添加 headers
RxJava - add headers in a sorted list of emitted items
假设我有一个项目列表并发出它:
Observable<Item> items = Observable.fromIterable(list);
现在我想要第二个可插入 headers 的可观察对象。是否必须插入header可以通过比较两个连续的项目来决定。有什么想法吗?
逻辑如下:
- 比较两个连续的项目
- 如果他们需要不同的 header,请在它们之间添加一个新的 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);
假设我有一个项目列表并发出它:
Observable<Item> items = Observable.fromIterable(list);
现在我想要第二个可插入 headers 的可观察对象。是否必须插入header可以通过比较两个连续的项目来决定。有什么想法吗?
逻辑如下:
- 比较两个连续的项目
- 如果他们需要不同的 header,请在它们之间添加一个新的 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);