Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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 生成通量<;结果>;从两个通量_Java_Reactive Programming_Spring Webflux - Fatal编程技术网

Java 生成通量<;结果>;从两个通量

Java 生成通量<;结果>;从两个通量,java,reactive-programming,spring-webflux,Java,Reactive Programming,Spring Webflux,我现在正在使用Flux。我想从两个不同的对象创建一个Flux。我知道我必须使用双功能,但我不知道如何使用。 第一个对象对第一个对象具有PK和第二个FK。我要压缩PK=FK的对象 描述问题: 我有一个工作中的案例,我有一个房屋清单和一个我曾在其中的清单。我需要返回所有房屋的结果,我只会更改结果对象上的真/假标志。当然,第二个列表可能包含较少的元素 有人能提出这样或其他的建议吗 @RunWith(SpringRunner.class) @SpringBootTest public class Wh

我现在正在使用
Flux
。我想从两个不同的对象创建一个
Flux
。我知道我必须使用双功能,但我不知道如何使用。 第一个对象对第一个对象具有PK和第二个FK。我要压缩PK=FK的对象

描述问题: 我有一个工作中的案例,我有一个房屋清单和一个我曾在其中的清单。我需要返回所有房屋的结果,我只会更改结果对象上的真/假标志。当然,第二个列表可能包含较少的元素

有人能提出这样或其他的建议吗

@RunWith(SpringRunner.class)
@SpringBootTest

public class WholesaleControllerTest {

@Test
public void testZipFlux() {
    Flux<Flux1> flux1 = Flux.just(new Flux1(1, "test1"), new Flux1(2, "test2"), new Flux1(3, "test3"));
    flux1.subscribe(item -> System.out.println("Flux1 " + item));
    Flux<Flux2> flux2 = Flux.just(new Flux2(2, true), new Flux2(1, false), new Flux2(3, true));
    flux2.subscribe(item -> System.out.println("Flux2 " + item));


    Flux<Result> = ...//TODO zip flux1 and flux2 to RESULT

}

@Getter
@Setter
@AllArgsConstructor
class Flux1{
    private int id;
    private String value;
}

@Getter
@Setter
@AllArgsConstructor
class Flux2{
    private int id_fk_flux2;
    private boolean value;
}


@Getter
@Setter
@AllArgsConstructor
class Result{
    private int id;
    private String flux1Value;
    private boolean flux2Value;
}
@RunWith(SpringRunner.class)
@春靴测试
公共级批发商控制测试{
@试验
公共无效测试Zipflux(){
通量flux1=通量.just(新的flux1(1,“test1”)、新的flux1(2,“test2”)、新的flux1(3,“test3”);
flux1.subscribe(item->System.out.println(“flux1”+item));
通量flux2=通量。just(新的flux2(2,真)、新的flux2(1,假)、新的flux2(3,真));
flux2.subscribe(item->System.out.println(“flux2”+item));
Flux=…//TODO zip flux1和flux2的结果
}
@吸气剂
@塞特
@AllArgsConstructor
Flux1类{
私有int-id;
私有字符串值;
}
@吸气剂
@塞特
@AllArgsConstructor
类Flux2{
私人内部id_fk_flux2;
私有布尔值;
}
@吸气剂
@塞特
@AllArgsConstructor
班级成绩{
私有int-id;
私有字符串flux1值;
私有布尔值;
}

}这是一种方法。但我必须说,这不是严格的反应式编程(因为我在第一个通量上使用块来创建一个映射)

话虽如此,我想不出别的办法

Map<Integer, Flux1> flux1Map = flux1.collectMap(Flux1::getId, Function.identity()).block();

Flux<Result> results = flux2.flatMap(item -> {
        //TODO : Handle cases like key not found in flux1
        Flux1 entry = flux1Map.get(item.getId_fk_flux2());
        Result result = new Result(entry.getId(), entry.getValue(), item.isValue());
        return Mono.just(result);
    }).collectList().flatMapMany(Flux::fromIterable);
Map flux1Map=flux1.collectMap(flux1::getId,Function.identity()).block();
通量结果=flux2.flatMap(项目->{
//TODO:处理flux1中找不到密钥之类的情况
Flux1 entry=flux1Map.get(item.getId_fk_flux2());
结果=新结果(entry.getId()、entry.getValue()、item.isValue());
返回Mono.just(结果);
}).collectList().flatMapMany(通量::fromIterable);

你能用
Flux.concat(flux1,flux2)
来做这些吗?@AntonBalaniuc不,concat可以工作,两种助焊剂的类型都是一样的。@Deluxx,恐怕你也不能用zipWith,因为两种助焊剂的顺序不同。所以,当你们在flux1和flux2中遇到第一个项目时,你们无法匹配我,尤其是我。我有一个工作中的案例,我有一个房屋清单和一个我曾在其中的清单。我需要返回所有房屋的结果,我只会更改
result
对象上的真/假标志。当然,第二个列表可能包含较少的元素。还有别的办法吗?请你澄清一下你需要的担保吗?如果Flux没有具有普通pk的项目,你会怎么想?我有两个案例。1.如果不是,请设置特定值,例如false 2。如果没有,则不为
结果创建新元素
我对
block()
有问题,因为我有错误:
block()/blockFirst()/blockLast()正在阻塞检查此项,但这是块分辨率。根据您的要求,我必须创建非阻塞:/。。我认为这是不可能的。如果你能做到,请告诉我们。干杯