处理嵌套通量操作的智能方法

Smart way to handle nested flux operations

我有2种查询方法(findByName/findAnotherName)。

两者都 return Mono .

我通过比较这两种方法的结果来做一些逻辑,然后 return 其中之一在嵌套的 Flux 操作中。

它可能有一个聪明的方法来达到同样的结果。

以下是代码片段:

private Mono<List<Student>> find(String name) {

    return repo.findByName(name)
            .flatMap((List<Student> students) -> {

                return repo.findAnotherName(anothName, 1).collectList()
                        .flatMap((List<Student> anotherStudents) -> {

                            //do some logic

                            return Mono.just(students);
                        });

            });

}

提前致谢。

https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#zipWhen-java.util.function.Function-java.util.function.BiFunction-

如果您的 //do some logic 是同步的,那么我可以建议类似

private Mono<List<Student>> find(String name) {

    return repo.findByName(name)
            .zipWhen((List<Student> students) -> {
                return repo.findAnotherName(anothName, 1).collectList();
            }, (students, anotherStudents) -> {
                //some sync logic
                return students;
            });
}

但是如果逻辑也是异步的,那么

private Mono<List<Student>> find(String name) {

    return repo.findByName(name)
            .zipWhen((List<Student> students) -> {
                return repo.findAnotherName(anothName, 1).collectList()
                        .flatMap(anotherStudents -> someAsyncMethod(anotherStudents));
            }, ((students, o) -> students));
}