当前位置: 首页 > 知识库问答 >
问题:

混合使用反应式代码(即单声道)可以吗

邹嘉石
2023-03-14

我有两个对象,每个对象都包含一个列表,我的整个Spring Boot项目都使用ProjectReactor构造。我应该在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流。

共有1个答案

傅振濂
2023-03-14

我有时觉得,就在Java8出现后,我们看到了同样的“想为一切使用流”心态的重现,但是有了Reactor/RXJava。

我应该在通量或单声道映射操作中使用java流进行遍历

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

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

但是,如果您实际上只是过滤和映射一个现有的Java集合,就像您在那个示例中看到的那样,reactor无法提供任何改进,那么我认为没有理由不使用标准Java流。

 类似资料:
  • 我在我的项目中使用了spring-boot-starter-webflux、ractor-test和spring-boot-starter-test 2.0.0.m7。在我的中有一个,您可以通过方法添加字符串值。还可以询问通过方法添加到列表中的所有值。问题是如何测试?我有,但它似乎不起作用,因为返回的总是0。我知道问题是中的方法,但我不知道原因和如何解决它。有人知道我应该如何创建一个有效的Juni

  • 我有一个Spring MVC(不是WebFlux)应用程序,它使用WebFlux项目中的类。除了与相关的代码之外,应用程序中的所有现有代码都是基于的异步代码,对JPA的阻塞调用通常是这样进行的: 但是,对于,我不再确定如何根据返回的结果调用JPA。例如: 不接受执行器。它是否在自己的调度器线程上运行? 我听说在Spring MVC应用程序中使用反应式也会带来性能优势。但是在我的例子中,我已经在整个

  • 我想制作Java应用程序。使用CEF3库。CEF是在任何应用程序中嵌入谷歌Chrome浏览器的库。LWJGL用于编写Java的GL代码。但是在使用CEF之前,基本问题是如何混合C和Java。 > Java main将C部分调用为DLL C部分创建窗口并设置GL上下文 在消息循环中,C再次回调Java部分,以便在Java中完成一些GL工作。 以下测试代码失败,并显示消息: 本机方法中的致命错误:线程

  • 我有一个服务电话返回单声道。现在,在给用户提供API响应的同时,我想发送一些响应。我试过用flatMap和地图,但它不起作用。它给了我一个空的身体作为回应。 谢谢你

  • 我正在编写一些从第三方库扩展类的JUnit测试。超级类扩展了,所以根据定义,我的子类也扩展了。 在我的子类中,我用前缀编写测试方法,然后执行这些方法。 但是,出于许多原因,我们希望转移到JUnit4(其中一个原因是,我们不希望必须在测试方法前缀) 我尝试过使用JUnit4注释简单地编写新测试,但这些方法没有得到执行。 例如: 不扩展第三方测试类不是一个选项。(值得注意的是,Spring的又扩展了其

  • 我面临的情况是,我必须使用2 Mono,其中第二个将依赖于第一个的Id字段,并在第一个Mono的主体中返回第二个的响应。 例如: 然后将结果返回为 我试过了 但像这样,我只能返回第二个单声道的响应。 通过尝试Map或Flatmap,它只在第二个单声道上起作用。 请提出建议。