Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Mono压缩焊剂的正确方法是什么?_Java_Functional Programming_Spring Webflux_Reactive - Fatal编程技术网

Java 使用Mono压缩焊剂的正确方法是什么?

Java 使用Mono压缩焊剂的正确方法是什么?,java,functional-programming,spring-webflux,reactive,Java,Functional Programming,Spring Webflux,Reactive,有一个Mono和Flux,我们需要像这样创建一个元组流: Mono<A> monoA = createMono(); // {a} Flux<B> fluxB = createFlux(); // {b1, b2, ... b100, ...} Flux<Tuple<A,B>> zippedTuples = magicZip(monoA, fluxB); // { (a:b1), (a:b2), ... (a:b100), ...} Mono

有一个
Mono
Flux
,我们需要像这样创建一个元组流:

Mono<A> monoA = createMono(); // {a}
Flux<B> fluxB = createFlux(); // {b1, b2, ... b100, ...}

Flux<Tuple<A,B>> zippedTuples = magicZip(monoA, fluxB); // { (a:b1), (a:b2), ... (a:b100), ...}
Mono monoA=createMono();//{a}
通量fluxB=createFlux();//{b1,b2,…b100,}
通量压缩倍数=magicZip(monoA,fluxB);//{(a:b1),(a:b2),…(a:b100),…}

编写
magicZip
函数的正确(或标准)方法是什么?

我认为使用zip函数是不可能的,因为它生成的元素数量是两个函数中最小的一个

我认为你能做到这一点的方法是:

Flux<A> fluxA = monoA.flux();
Flux<Tuple2<A,B>> zippedTuples =fluxB.flatMap(b -> fluxA.map(a -> Tuples.of(a,b)));
fluxA=monoA.Flux();
Flux-zippedTuples=fluxB.flatMap(b->fluxA.map(a->Tuples.of(a,b));

您可以创建此方法:

private <T>Flux<Tuple2<T, T>> magicZip(Mono<T> mono, Flux<T> flux) {
    Flux<T> repeatableMono = mono.repeat();
    return flux.zipWith(repeatableMono);
}
private-Flux-magicZip(Mono-Mono,Flux-Flux){
Flux repeatableMono=mono.repeat();
返回通量zipWith(可重复Mono);
}
字符串类型的示例:

    Flux<Tuple2<String, String>> test = magicZip(getMono(), getFlux()).doOnNext(objects -> System.out.println(objects.getT1() + objects.getT2()));
    test.blockLast();
Flux test=magicZip(getMono(),getFlux()).doOnNext(objects->System.out.println(objects.get1()+objects.get2());
test.blockLast();

monoA.flux()使用一个项创建一个通量,因此压缩的通量也将包含一个元组,删除所有其他元组,因此我不使用Zip,这是我在开始时说的。方法不是使用zip,而是使用flatMap和map代替。是的,这是必需的。需要指出的是,
mono.repeat()
执行mono的次数是flux中项目数的两倍。在大多数情况下,
mono.cache().repeat()
是最适用的。是的,很好,我想添加这个操作符,但我只关注你的问题。