如何在Java中从Java List创建一个scala.collection.immutable.Seq?

32

我正在尝试在我的Java项目中使用Akka,并且遇到了一个关于Scala Seq类型的小问题。我能够将Java的ActorRef List转换为scala.collection.Seq,但是我正在尝试使用的Akka API需要一个scala.collection.immutable.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;
    }
}
5个回答

47

您可以使用scala.collection.JavaConversions.asScalaBuffer将Java的List转换为Scala的Buffer,该Buffer具有toList方法,而Scala List是一个collection.immutable.Seq


我选择了这个作为最接近我特定问题的答案。我最终采用的代码是:new CyclicIterator<ActorRef>((Seq<ActorRef>) asScalaBuffer(workers).toList()); - spieden

4

谢谢你的回答。我想我把immutable.Seq错认为是一个具体类型了! - spieden

3
您可以尝试这个方法:
scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();

1

您可以使用:

scala.collection.JavaConverters.collectionAsScalaIterableConverter(workers).asScala().toSeq()


0

自从 scala 2.12.0 版本开始,JavaConversions 已被标记为过时。

@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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接