Как создать scala.collection.immutable.Seq из списка Java в Java?

Я пытаюсь заставить Akka работать в моем проекте Java, и я застрял на небольшой проблеме с типом (ами) Seq из Scala. Я могу преобразовать свой Java-список ActorRef в scala.collection.Seq, но API Akka, который я пытаюсь использовать, требует 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;
    }
}

person spieden    schedule 22.07.2011    source источник


Ответы (4)


Вы можете использовать scala.collection.JavaConversions.asScalaBuffer для преобразования Java List в Scala Buffer, который имеет метод toList, а Scala List является collection.immutable.Seq.

person Landei    schedule 22.07.2011
comment
Выбрал этот, так как он более точно ответил на мой конкретный вопрос. В итоге я получил следующую строку: new CyclicIterator‹ActorRef›((Seq‹ActorRef›) asScalaBuffer(workers).toList()); - person spieden; 22.07.2011

документация akka Java для маршрутизаторов, а также ScalaDoc для < href="http://akka.io/api/akka/1.1.3/#akka.routing.CyclicIterator" rel="nofollow">CyclicIterator предполагает, что конструктор CyclicIterator принимает список.

person Emil Sit    schedule 22.07.2011
comment
Спасибо за ответ. Думаю, я ошибочно принял immutable.Seq за конкретный тип! - person spieden; 22.07.2011

Вы можете использовать:

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

person Ben McCann    schedule 12.03.2017

Вы можете попробовать это:

scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();
person markus    schedule 06.11.2019