如何从 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 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();
【讨论】:
以上是关于如何从 Java 中的 Java 列表创建 scala.collection.immutable.Seq?的主要内容,如果未能解决你的问题,请参考以下文章