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

Reactor对通量的操作会按顺序进行吗?

徐子石
2023-03-14

如果我在通量上有两个平面图,它们是否总是按顺序执行

Flux.just(1,2,3,4)
    .flatMap(...) 
    .flatMap(...) // Will this always execute 2nd?

共有2个答案

郗欣嘉
2023-03-14

让我们来看这些小例子:

Flux.just(3, 2, 1)
  .flatMap(e -> {
    System.out.println("First FlatMap : " + e);
    return Mono.just(e).delayElement(Duration.ofMillis(e * 100));
  })
  .flatMap(e -> {
    System.out.println("Second FlatMap : " + e);
    return Mono.just(e);
  })
  .blockLast();

/*
First FlatMap : 3
First FlatMap : 2
First FlatMap : 1
Second FlatMap : 1
Second FlatMap : 2
Second FlatMap : 3
*/
Flux.just(3, 2, 1)
  .flatMap(e -> {
    System.out.println("First FlatMap : " + e);
    return Mono.just(e);
  })
  .flatMap(e -> {
    System.out.println("Second FlatMap : " + e);
    return Mono.just(e);
  })
  .blockLast();

/*
First FlatMap : 3
Second FlatMap : 3
First FlatMap : 2
Second FlatMap : 2
First FlatMap : 1
Second FlatMap : 1
*/

我们可以说,操作符按照元素的出现顺序处理元素

蒋文光
2023-03-14

这取决于你的确切意思——细节在这里很重要。

对于任何给定的元素,答案都是肯定的——它将由第一个平面地图调用处理,然后由第二个平面地图调用处理该平面地图调用的结果。回想一下,Reactor中的运算符,类似于香草Java流,是链式的——所以没有合理的方法可以让它们按顺序运行。

但是,对于所有元素,没有-因为它不会处理所有4个元素的第一个平面图调用,然后处理所有4个元素的第二个平面图调用-每个元素都是独立处理的。当您考虑到通量类似于可能没有终点的元素流,而不是一个定义的、有界的集合时,如果它不这样做,那么它就没有多大意义。

 类似资料:
  • 问题内容: 我必须创建一种方法,该方法根据电子邮件按字母顺序对对象的 ArrayList 进行排序,然后打印排序后的数组。我在排序时遇到的麻烦。我已经对其进行了研究并尝试使用,但这对我不起作用。我当时是需要一个称为比较器的东西,但无法弄清楚它是如何工作的。我将不得不使用这些东西吗?还是像气泡排序或插入排序这样的东西可以用于这种事情? 这是我到目前为止的代码: 问题答案: 排序部分可以通过实现cus

  • 如何有条件地执行 我有一个返回Mono的方法 有人能帮我找到合适的供应商运营商吗? -谢谢

  • 问题内容: 因此,在数据库中,我存储了乐器名称(以及其他各种属性)。假设它是主键,并且是唯一键。 在PHP脚本中,我按其乐器类选择项,如下所示: 结果表: 这使我可以仅通过查询“萨克斯管”来选择整个乐器系列,例如“高音萨克斯管”,“中音萨克斯管”等。 在该特定示例中,结果按其ID排序(您可以假定其为auto_incremented)。更理想的是按字母顺序排序,是吗? 这工作正常,但作为音乐人,他们

  • 问题内容: 我有这个: 和[电影]数组。如何按名称的字母顺序对数组进行排序?我试过了: 和 但这不起作用,因为我没有访问电影的名称属性。 问题答案: 在传递给的闭包中,比较要排序的属性。像这样: 或以下要绕过案例的案例: 旁注: 通常,只有类型以大写字母开头;我建议使用and ,而不是and 。 例如,在操场上: 将按顺序 Swift5更新

  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。

  • 按字母顺序排列的全部操作符列表 aggregate( ) — see reduce( ) all( ) — determine whether all items emitted by an Observable meet some criteria amb( ) — given two or more source Observables, emits all of the items from