gpt4 book ai didi

java - 与 Flux 相交操作 - Project Reactor

转载 作者:行者123 更新时间:2023-12-03 20:53:04 24 4
gpt4 key购买 nike

假设我有两个 var a = Flux.just("A", "B", "C")var b = Flux.just("B", "C", "D")
我希望能够将两个变量相交,结果应该相当于一个集合相交

类似 a.intersect(b)Flux.intersect(a, b)这将导致(通量)["B", "C"]
我找不到任何可以执行此操作的操作,有什么想法吗?

最佳答案

你可以像这样使用 join、filter、map 和 groupBy

    //Join fluxes in tuple
a.join(b,s -> Flux.never(), s-> Flux.never(),Tuples::of)
//Filter out matching
.filter(t -> t.getT1().equals(t.getT2()))
//Revert to single value
.map(Tuple2::getT1)
//Remove duplicates
.groupBy(f -> f)
.map(GroupedFlux::key)
.subscribe(System.out::println);

结果是对每个订阅者进行单一订阅,并且还可以与欺骗者一起使用。

或者你可以编写自己的 intersect 方法
public <T> Flux<T> intersect(Flux<T> f1,Flux<T> f2){
return f1.join(f2,f ->Flux.never(),f-> Flux.never(),Tuples::of)
.filter(t -> t.getT1().equals(t.getT2()))
.map(Tuple2::getT1)
.groupBy(f -> f)
.map(GroupedFlux::key);
}

//Use on it's own
intersect(a,b).subscribe(System.out::println)

//Or with existing flux
a.transform(f -> intersect(a,f)).subscribe(System.out::println)

关于java - 与 Flux 相交操作 - Project Reactor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62049249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com