左外连接两个排序的稀疏序列与项目反应堆

时间:2017-11-27 20:09:59

标签: java project-reactor reactive-streams

给定具有稀疏ID的实体的两个排序流。让我们把它们建模为:

Flux<Long> stream1 = Flux.fromArray(new Long[] {1L, 3L, 4L, 5L, 6L});
Flux<Long> stream2 = Flux.fromIterable(List.of(1L, 2L, 3L, 4L, 6L, 7L));

实现一个组成管道的函数,该管道在SQL中执行的操作称为FULL OUTER JOIN。所以最后调用以下代码:

public static Flux<Map.Entry<Long, Long>> fullOuterJoin(Flux<Long> stream1, Flux<Long> stream2) {
}
fullOuterJoin(stream1, stream2).log().subscribe();

产生类似于以下内容的结果:

onSubscribe(...)
request(...)
onNext(1=1)
onNext(null=2)
onNext(3=3)
onNext(4=4)
onNext(5=null)
onNext(6=6)
onNext(null=7)
onComplete()

不知道是否可以使用.join(),尝试使用.zip()但它不会通过ID映射它们,并在第一个序列耗尽元素时停止。我知道.bufferUntil()可以使用但是正在寻找其他一些选项,最好是我缺少的一些原生支持。任何关于如何有效实施它的想法都是最受欢迎的。

1 个答案:

答案 0 :(得分:0)

这不是Reactive Streams的直接拟合,因为RS中不允许空值,并且没有&#34;稀疏序列&#34;的概念。试图将SQL /集合理论概念塞入RS并不能保证成功:(

在RxJava中有一个答案,但它需要一个扩展的操作员,我们在Reactor中还没有: