首页 > 解决方案 > (Scala + RxJava3) Flowables.orderedMerge NoSuchMethodError

问题描述

在 Ammonite 中,我执行以下代码...尝试对两个 Flowables 进行有序合并,

import $ivy.{
    `io.circe::circe-generic:0.13.0`                    ,
    `io.circe::circe-parser:0.13.0`                     ,
    `io.circe::circe-optics:0.13.0`                     ,
    `com.softwaremill.sttp::core:1.7.2`                 ,
    `org.scalaz::scalaz-core:7.2.27`                    ,
    `com.lihaoyi::requests:0.2.0`                       ,
    `io.get-coursier::coursier-core:2.0.0-RC4`          ,
    `io.lemonlabs::scala-uri:1.4.10`                    ,
    `net.liftweb::lift-json:3.4.0`                      ,
    `io.reactivex.rxjava3:rxjava:3.0.3`                 ,
    `com.github.akarnokd:rxjava3-extensions:3.0.0-RC7`
}

import io.lemonlabs.uri._
implicit val formats = net.liftweb.json.DefaultFormats
import net.liftweb.json.JsonAST._
import net.liftweb.json.Extraction._
import net.liftweb.json._
import io.reactivex.rxjava3.core._
import io.reactivex.rxjava3.functions._
import net.liftweb.json.JsonDSL._
import collection.JavaConverters._
import io.reactivex.rxjava3.subjects._
import scala.collection.mutable.HashMap
import io.reactivex.rxjava3.internal.functions.Functions
Flowables.orderedMerge(
    List(
        Flowable.just(3, 5),
        Flowable.just(2, 4, 6)
    ).toIterable.asJava, 
    Functions.naturalComparator[Int]()
    ).subscribe(i=>println(i))

但是在打印 2 之后,它会抛出异常:

java.lang.NoSuchMethodError: io.reactivex.rxjava3.internal.subscribers.InnerQueuedSubscriber.requestOne()V
  hu.akarnokd.rxjava3.operators.BasicMergeSubscription.drain(BasicMergeSubscription.java:268)
  hu.akarnokd.rxjava3.operators.BasicMergeSubscription.innerComplete(BasicMergeSubscription.java:161)
  io.reactivex.rxjava3.internal.subscribers.InnerQueuedSubscriber.onSubscribe(InnerQueuedSubscriber.java:69)
  io.reactivex.rxjava3.internal.operators.flowable.FlowableFromArray.subscribeActual(FlowableFromArray.java:39)
  io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
  io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
  hu.akarnokd.rxjava3.operators.BasicMergeSubscription.subscribe(BasicMergeSubscription.java:79)
  hu.akarnokd.rxjava3.operators.FlowableOrderedMerge.subscribeActual(FlowableOrderedMerge.java:94)
  io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
  io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15686)
  io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15618)
  ammonite.$sess.cmd63$.<clinit>(cmd63.sc:1)

有人可以帮我吗?我对此一无所知...

奇怪的是,它可以打印第一个订购的商品,但不能打印以下商品……

标签: scalarx-javarx-java3

解决方案


rxjava3-extensions:3.0.0-RC7不兼容rxjava:3.0.3。候选版本不提供严格的兼容性保证。

升级rxjava3-extensions:3.0.0或升级。

供将来参考NoSuchMethodError几乎总是指示不兼容的库。异常消息中的未找到方法和堆栈跟踪顶部的方法很好地指示了涉及哪些库。


推荐阅读