java - Spring Flux(或 Java Stream)作为左连接合并

标签 java spring kotlin java-stream spring-webflux

如何加入这两个 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

我正在查看 zipzipWithmerge 但我有点困惑。有什么提示吗? 谢谢

最佳答案

     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/

相关文章:

Android 以指定帐户的 Intent 打开谷歌驱动器

java - 二进制搜索的实证分析与理论分析不匹配

java 聊天应用程序无法在其他机器上运行

spring - 如何在调用构造函数之前注入(inject) spring @Value 注释值?

spring - 从 Spring Web MVC 中的 JSP View 访问请求参数,而不将它们放入模型中

functional-programming - 使用函数式编程计算每个标签的出现次数

java - ElasticSearch 可扩展性设计 Java WebService

java - JButton 将按钮文本设置为变量

spring - ModelMapper 与 Spring,在哪里放置显式映射?

android - 在 Androidx 上使用 registerForActivityResult 选择文件