如何从 Java 中的 Java 列表创建 scala.collection.immutable.Seq?

Posted

技术标签:

【中文标题】如何从 Java 中的 Java 列表创建 scala.collection.immutable.Seq?【英文标题】:How to create a scala.collection.immutable.Seq from a Java List in Java? 【发布时间】:2011-10-10 16:57:12 【问题描述】:

我正试图让 Akka 进入我的 Java 项目,但我对 Scala 的 Seq 类型的一个小问题感到困惑。我能够将我的 ActorRef 的 Java 列表转换为 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;
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

之所以选择这个,是因为它更贴切地回答了我的具体问题。我最终得到的行是: new CyclicIterator((Seq) asScalaBuffer(workers).toList());【参考方案2】:

akka Java documentation for routers 和 CyclicIterator 的 ScalaDoc 都表明 CyclicIterator 构造函数采用 List。

【讨论】:

感谢您的回答。我想我把 immutable.Seq 误认为是一个具体的类型!【参考方案3】:

你可以使用:

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

【讨论】:

【参考方案4】:

你可以试试这个:

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

【讨论】:

以上是关于如何从 Java 中的 Java 列表创建 scala.collection.immutable.Seq?的主要内容,如果未能解决你的问题,请参考以下文章

强化 SCA 排除多个文件

如何从java中的列表中获取最近的纬度经度[重复]

如何从 Java 中的自定义谓词列表中创建一个谓词?

如何使用java从firebase数据库中的列表中获取所有值?

如何使用Java中的给定字符串值从数组列表中查找最长前缀?

如何将列表从 java 传递到 Oracle 过程?