使用RxJava遍历Vertx JsonArray

时间:2019-06-05 12:57:16

标签: rx-java2 vert.x vertx-verticle

我有一个消费传入消息的Verticle。每个消息将是一个顶点JsonObject,其中包含一个顶点JsonArray。我想为该数组中的每个元素执行逻辑。逻辑本身包含在单独的顶点中。第二个顶点使用rxVertx。它定义了几个使用者,每个使用者都委派了单独的方法,所有方法都返回一个Observable

我的问题是:如何:

  1. 遍历JsonArray
  2. 中的每个元素
  3. 将每个元素传递给与Observables一起使用的使用者。

在第一个垂直版本中,尝试了以下操作:

EventBus eb = rxVertx.eventBus();
JsonArray array= incomingMessage.getJsonArray(KEY);
List<Object> list  = array.getList();
Observable<Object> observable = Observable.fromArray(list);

observable.flatMapSingle(s -> {
      eb.rxSend(SECOND_VERTICLE_ADDRESS, s);
   }).subscribe();

由于以下原因,对flatMapSingle的调用无法编译

The method flatMapSingle(Function<? super Object,? extends SingleSource<? extends R>>) in the type Observable<Object> is not applicable for the arguments ((<no type> s) -> {})

正确的方法是什么?非常感谢

1 个答案:

答案 0 :(得分:1)

如果使用代码块定义flatMapSingle函数参数,则必须使用return关键字:

observable.flatMapSingle(s -> {
  return eb.rxSend(SECOND_VERTICLE_ADDRESS, s);
}).subscribe(reply -> {
  // Handle each reply
});

请注意,flatMapSingle不保证答复的顺序与传入消息的顺序相同。如果需要保证,请使用concatMapSingle