我正在创建一个流动的产品和一个Mono Category对象,需要应用到产品,因为所有它们都要归入同一类别.我正在try 将类别添加到每个产品中,如下所示.


     Flux<Product> products = productRepository.findAllById(productCodes);
     Mono<Category> category = categoryRepository.findById(productCodes.get(0));
     
     The category for all these products should be set as:

     //If these were a list of products i.e List<Product> productList and Category was 
     //not a Mono I would set them like this:
 
     productList.forEach( product -> product.setCategory(category));

由于各自的存储库分别返回Mono和Flux,我不确定如何使用react 式框架来做到这一点,因为我对它非常陌生.有没有人可以教我如何使用react 式来实现这一点?

推荐答案

事实上,有很多方法可以实现这一点.

下面是一个例子,在这个例子中,你将flatMap()的函数应用到你的产品流量的每个元素上.此功能使用您的类别Mono来设置产品的类别.

productsFlux.flatMap(product -> categoryMono.map(category -> {
    product.setCategory(category);
    return product;
}));

或者反之亦然,在你的类别Mono上使用flatMapMany():

categoryMono.flatMapMany(category -> productsFlux.map(product -> {
    product.setCategory(category);
    return product;
}));

或者你可以用缓存把你的类别Mono变成永远不会结束的流量,然后对你的产品流量和类别流量做Flux.zip(),就像这样:(我更喜欢这个选项,因为它更好地确保数据库只调用一次类别)

Flux<String> categoryHotFlux = categoryMono.cache().repeat();

Flux.zip(productsFlux, categoryHotFlux)
        .map(tuple -> {
            Product product = tuple.getT1();
            Category category = tuple.getT2();
            product.setCategory(category);
            return product;
        });

Java相关问答推荐

编译期间错误(Java 0000)Android .Net MAUI

找到允许的最大底片

使用包私有构造函数强制子类Java类

弹簧靴和龙目岛

DTO到实体,反之亦然,控制器和服务之间的哪一层应该处理转换?

JPanel透支重叠的JComcoBox

测试期间未执行开放重写方法

如何修复PDF重建过程中的文本定位

PDFBox未加载内容

JOOQ中的子查询使用的是默认方言,而不是配置的方言

通过Spring Security公开Spring Boot执行器端点

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

在执行流和相关操作时,使用Java泛型为2个方法执行相同的操作,但对象不同

垃圾回收器是否真的删除超出作用域的对象?

如何在透视表中添加对计数列的筛选?

如何在EL处理器中定义带有命名空间的变量?

如何在Maven Central上部署?

当我将JTextField的getText函数与相等的String进行比较时;t返回true

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

如何转换Vector<;对象>;转换为int?