How to create a scala.collection.immutable.Seq from a Java List in Java?

26,407

Solution 1

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.

Solution 2

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

Solution 3

You can use:

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

Solution 4

You can try this:

scala.collection.JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();
Share:
26,407
spieden
Author by

spieden

Updated on November 07, 2020

Comments

  • spieden
    spieden over 3 years

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