猿问

是否可以混合使用反应性代码,即 Mono 和 Flux 对象,它们是反应性流以及

我有两个对象,每个对象都包含列表,我的整个 spring boot 项目都在使用项目反应器构造。我应该在 flux 或 mono map 操作中使用 java 流来遍历和操作数据吗?


Flux.fromIterable(page.getPageFieldData()).subscribeOn(Schedulers.elastic()).map(pageField - > {

        clientDataMono.subscribeOn(Schedulers.elastic()).map(clientData - > {

            Flux.fromIterable(clientData.getPageFieldData())

            .filter(clientPageField - > clientPageField.getId() == pageField.getId())

            .subscribeOn(Schedulers.elastic()).map(field - > {

                dataUpdated = true;

                pageField.setData(field.getData());

                return field;

            }).subscribe();

            return clientData;

        }).subscribe();

        if (dataUpdated) {

            pageField.setModifiedOn(Instant.now(Clock.systemUTC()));

        }

        return pageField;

    }).subscribe();

或者我应该在 flux 的映射操作中使用 java 流。


开满天机
浏览 114回答 1
1回答

HUWWW

有时我觉得在 Java 8 出现之后,我们看到了同样的“想要为所有事情使用流”的心态,但是有了 Reactor / RXJava。我应该在 flux 或 mono map 操作中使用 java 流来遍历和操作数据吗?简短的回答是,如果您可以明智地使用 Java 流,并且 Reactor 在这种情况下没有提供任何优势,那么就没有理由使用 Reactor。当用例需要时,Reactor / 反应式编程非常棒,但请记住,它是一个外部库(未捆绑在核心 JRE 中),它比标准 Java 流更复杂,更难被普遍理解。Reactor 当然要强大得多。如果您需要控制产生值的速度、背压、详细的发布者/订阅者行为、多播、缓存、重试等,或者您可能在未来可行,那么它每次都会赢得胜利。但是,如果您实际上只是过滤和映射现有的 Java 集合,就像您在该示例中那样,反应堆无法提供任何改进,我认为没有充分的理由不使用标准 Java 流。
随时随地看视频慕课网APP

相关分类

Java
我要回答