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

发布于 2024-11-25 07:47:09 字数 724 浏览 1 评论 0原文

我正在尝试让 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;
    }
}

I'm trying to get Akka going in my Java project, and I'm hung up on a small issue with the Seq type(s) from Scala. I'm able to convert my Java List of ActorRef into a scala.collection.Seq, but the Akka API I'm trying to use requires a scala.collection.immutable.Seq. How can I make one?

Code:

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;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

自演自醉 2024-12-02 07:47:09

您可以使用 scala.collection.JavaConversions.asScalaBuffer 来将 Java List 转换为 Scala Buffer,后者具有 toList code> 方法,Scala List 是一个 collection.immutable.Seq

You can use scala.collection.JavaConversions.asScalaBuffer to convert the Java List to a Scala Buffer, which has a toList method, and a Scala List is a collection.immutable.Seq.

一百个冬季 2024-12-02 07:47:09

akka 路由器 Java 文档 以及 ScalaDoc for < a href="http://akka.io/api/akka/1.1.3/#akka.routing.CyclicIterator" rel="nofollow">CyclicIterator 都表明CyclicIterator 构造函数采用一个 List。

The akka Java documentation for routers as well as the ScalaDoc for CyclicIterator both suggest that the CyclicIterator constructor takes a List.

眼眸里的快感 2024-12-02 07:47:09

你可以试试这个:

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

You can try this:

scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();
请爱~陌生人 2024-12-02 07:47:09

您可以使用:

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

You can use:

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

甜中书 2024-12-02 07:47:09

由于 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();

Since scala 2.12.0 JavaConversions is marked deprecated

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

so one should use JavaConverters

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

or idiomatically

scala.collection.JavaConverters.asScalaIterator(list.iterator()).toSeq();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文