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

Aru*_*pta 2 java reactive-programming spring-boot project-reactor

我有两个对象,其中每个对象都包含列表,并且我的整个 Spring Boot 项目正在使用项目反应器构造。我应该在通量或单声道映射操作中使用 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();
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*rry 5

我有时觉得我们在 Java 8 出现之后看到了同样的“想要对所有事情都使用流”的心态,但使用 Reactor / RXJava。

我应该在通量或单声道映射操作中使用 java 流来遍历和操作数据吗?

简短的回答是,如果您可以明智地使用 Java 流,而 Reactor 在这种情况下没有提供任何优势,那么就没有理由使用 Reactor。当用例需要时,Reactor / 反应式编程非常棒,但请记住,它是一个外部库(未捆绑在核心 JRE 中),它比标准 Java 流要复杂得多,而且更不容易被普遍理解。

Reactor当然要强大得多。如果您需要控制生成值的速度、背压、详细的发布者/订阅者行为、多播、缓存、重试等,或者您可能在未来可行,那么它每次都会获胜。

但是,如果您实际上只是过滤和映射现有的 Java 集合,正如您在该示例中所表现的那样,其中 reactor 无法提供任何改进,那么我认为没有充分的理由不使用标准 Java 流。