如何加入这两个 Flux
val a: Flux<String> = Flux.just("foo", "bar", "baz", "foobar")
val b: Flux<Pair<String, Int>> = Flux.just( Pair("foo", 5), Pair("baz", 5))
要像这样输出另一个 Flux 吗?
val c: Flux<Pair<String, Int>> = Flux.just(
Pair("foo", 5),
Pair("bar", 0),
Pair("baz", 5),
Pair("foobar",0)
)
简单来说,我需要 A 的所有元素,如果存在则为 B 的值,否则为零/null,就像 sql left join
我正在查看 zip
、zipWith
、merge
但我有点困惑。有什么提示吗?
谢谢
最佳答案
Flux.from(a)
.map(s -> {
return b.filter(strPair -> s.equals(strPair.fst)).switchIfEmpty(Flux.just(Pair.of(s,0)));
}).flatMap(Flux::next).log().subscribe();
输出:
10:26:00.358 [main] INFO reactor.Flux.FlatMap.3 - request(unbounded)
10:26:00.591 [main] INFO reactor.Flux.FlatMap.3 - onNext(Pair[foo,5])
10:26:00.593 [main] INFO reactor.Flux.FlatMap.3 - onNext(Pair[bar,0])
10:26:00.594 [main] INFO reactor.Flux.FlatMap.3 - onNext(Pair[baz,5])
10:26:00.594 [main] INFO reactor.Flux.FlatMap.3 - onNext(Pair[foobar,0])
10:26:00.594 [main] INFO reactor.Flux.FlatMap.3 - onComplete()
关于java - Spring Flux(或 Java Stream)作为左连接合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599532/