gpt4 book ai didi

java - 从两个 Flux 生成 Flux

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:37 25 4
gpt4 key购买 nike

我现在正在使用 Flux .我想创建一个 Flux<Result>来自两个不同的对象 Flux .我知道我必须使用 BiFunction但我不知道怎么办。第一个对象对第一个对象有 PK,第二个 FK。我想压缩 PK=FK 的那个对象。

描述问题: 我有一个工作案例,我有一份房屋 list 和一份我所在的 list 。我需要返回所有房屋的结果,我只会更改 Result 对象上的 true/false 标志。第二个列表当然可能有更少的元素。

任何人都可以提出类似的建议或任何其他方式吗?

@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;
}

最佳答案

这是一种方法。但我不得不说,这不是严格的响应式(Reactive)编程(因为我在第一个通量上使用 block 来创建 map )。

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

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);

关于java - 从两个 Flux 生成 Flux<Result>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51098632/

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