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

你可以flux.zip一个mono和一个flux并对每个flux值重复mono值吗?

楮法
2023-03-14

有可能做类似下面代码的事情吗?我有一个服务进行API调用,另一个返回值流。我需要用API调用返回的值修改每个值。

return Flux.zip(
                     someMono.get(),
                     someFlux.Get(),
                     (d, t) -> {
                         //HERE D IS ALWAYS THE SAME AND T IS EVERY NEW FLUX VALUE
                     });

我尝试过用。repeat()处理单声道,它可以工作,但是每次有新的流量值时它都会调用方法,而且是API调用,所以不好。

有可能吗?

共有1个答案

申昌勋
2023-03-14

您可以使用cache运算符来完成此操作。取消对flux的注释而不使用cache,您将看到对getnum==100的调用数。使用缓存时,它将是1

public class RepeatableMono {

  private static AtomicInteger numberOfCalls = new AtomicInteger(0);

  static Integer getNum() {
    System.out.println("GetNum Called: " + numberOfCalls.incrementAndGet());
    return 0;
  }

  public static void main(String[] args) {
    // This will print `GetNum Called: ` 100 times.
    //Flux<Integer> neverEndingFlux = Mono.defer(() -> Mono.just(getNum()))
    // .repeat();

    // This will print `GetNum Called: ` 1 times.
    Flux<Integer> neverEndingFlux = Mono.defer(() -> Mono.just(getNum()))
        .cache()
        .repeat();

    Flux<Integer> stream = Flux.range(1, 100);

    Flux.zip(neverEndingFlux, stream, (x, y) -> x + " " + y)
        .subscribe(System.out::println);
  }
}

 类似资料:
  • 我有一个包含两部分的简单程序:一个Spring5服务器,其中一个endpoint返回Mono 当我浏览到http://localhost:8080/rand返回一个双精度值。但是,当我使用客户机时,检索到的值始终为null(响应状态为200)。 我错过了什么?

  • 我想从Flux/Mono中获取对象。我使用 我会这样做: 我有错误: 为什么?有什么不同的方法来获取对象? 在反应式编程中,如何做到:在RequestBody中,您有UserDto。 如果不创建用户,请检查数据库中是否存在电子邮件。

  • 我的代码是这样构造的- 我正在努力实现这一点: 方法1()返回地址时,我需要使用它并调用方法2()来更新MongoDB文档中的地址。也没有抛出异常。但是我没有看到任何日志在方法2() 代码: 虽然调用了method2(),但MongoDB中的文档更新没有发生。

  • 我是反应性编程概念的新手。我正在学习“学习Spring Boot2.0”,所描述的简单概念/示例是可以理解的。但是我不知道如何在更复杂的用例中使用mono/flux。spring boot,mongo和project reactor的一些例子 我的模型

  • 我是整个Spring反应性网络流量的新手。我的问题很简单。在我的addActions()我试图得到一个单声道通过调用getMONtVal()。这工作罚款。但是我需要得到它的值并更新一个属性(submission.state瓦尔)。然后传递调用CustService.addActions(),返回Mono。可以做到这一点而不使用块()?