首页 > 解决方案 > Java 8 反应流中的嵌套通量

问题描述

我有 3 个返回通量语句,都嵌套在另一个中,如下所示:- 我在 3 个存储库中有 3 个项目-> reactiveRepo1,2,3

下面的代码片段会返回 27 个不同的苹果吗?

private Flux<Apple> method() {
    Apple A = new Apple(); 
    return reactiveRepo1.findAll()
        .flatMap(item -> {
            A.setProp1(item.getSomething())
            return reactvieRepo2.findAll()
                .flatMap(item2 -> {
                    A.setProp2("item.getSomething2()")
                    return reactiveRepo3.findAll()
                        .flatMap(item3 -> { 
                            A.setProp3("item.getSomething3()");
                            return A;
                        });
                });
         });

}

标签: java-8spring-webflux

解决方案


你可以做这样的事情

private Flux<Apple> method() {
    return Flux.zip(Array.asList(
        reactiveRepo1.findAll(),
        reactvieRepo2.findAll(),
        reactiveRepo3.findAll()),
        arrayReturnValues -> {

            ...

        }
    );
}

其中arrayReturnValues是一个数组,其中包含从所有存储库中检索到的所有值。在...中,您必须编写一个处理返回值的函数


推荐阅读