如何在Java中从Java列表创建scala.Colltion.immuable.Seq?

92dk7w1h  于 2022-11-09  发布在  Scala
关注(0)|答案(5)|浏览(130)

我正在尝试让Akka进入我的Java项目,但我被Scala中的Seq类型的一个小问题所困扰。我可以将我的ActorRef的Java列表转换为scala.Collection tion.Seq,但我尝试使用的Akka API需要一个scala.cipltion.immuable.Seq。我怎么才能做一个呢?
代码:

static class Router extends UntypedLoadBalancer {
    private final InfiniteIterator<ActorRef> workers;

    public Router(List<ActorRef> workers) {
        Seq workerSeq = asScalaBuffer(workers);

        // how to get from the scala.collection.Seq above to the instance of
        // scala.collection.immutable.Seq required by CyclicIterator below?
        this.workers = new CyclicIterator<ActorRef>();
    }

    public InfiniteIterator<ActorRef> seq() {
        return workers;
    }
}
vsmadaxz

vsmadaxz1#

您可以使用scala.collection.JavaConversions.asScalaBuffer将Java List转换为Scala Buffer,它具有toList方法,而Scala Listcollection.immutable.Seq

z8dt9xmd

z8dt9xmd2#

akka Java documentation for routers和CyclicIterator的ScalaDoc都建议CyclicIterator构造函数接受列表。

v6ylcynt

v6ylcynt3#

您可以尝试以下操作:

scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();
vnzz0bqm

vnzz0bqm4#

您可以使用:
scala.collection.JavaConverters.collectionAsScalaIterableConverter(workers).asScala().toSeq()

dauxcl2d

dauxcl2d5#

由于scala2.12.0JavaConversions被标记为不推荐使用

@deprecated("use JavaConverters", since="2.12.0")
object JavaConversions extends WrapAsScala with WrapAsJava

所以应该使用JavaConverters

scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();

或者习惯用语

scala.collection.JavaConverters.asScalaIterator(list.iterator()).toSeq();

相关问题