web-dev-qa-db-fra.com

Comment créer un scala.collection.immutable.Seq à partir d'une liste Java en Java?

J'essaie de faire entrer Akka dans mon projet Java et je suis suspendu à un petit problème avec le (s) type (s) Seq de Scala. Je suis en mesure de convertir ma liste Java d'ActorRef en scala.collection.Seq, mais l'API Akka que j'essaie d'utiliser nécessite un scala.collection.immutable.Seq. Comment puis-je en faire un?

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

Vous pouvez utiliser scala.collection.JavaConversions.asScalaBuffer pour convertir Java List en une Scala Buffer, qui possède une méthode toList et une Scala List est un collection.immutable.Seq

37
Landei

La documentation Java de akka pour les routeurs ainsi que ScalaDoc pour CyclicIterator suggèrent tous deux que le constructeur CyclicIterator prend une liste.

4
Emil Sit

Vous pouvez utiliser:

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

1
Ben McCann