【问题标题】:How to create a scala.collection.immutable.Seq from a Java List in Java?如何从 Java 中的 Java 列表创建 scala.collection.immutable.Seq?
【发布时间】: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;
    }
}

【问题讨论】:

    标签: java scala akka


    【解决方案1】:

    您可以使用scala.collection.JavaConversions.asScalaBuffer 将Java List 转换为具有toList 方法的Scala Buffer,而Scala List 是collection.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();
      

      【讨论】:

        猜你喜欢
        • 2013-06-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 2021-09-16
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        相关资源
        最近更新 更多