Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implicit conversion of java.util.List to scala List does not occur

I have very basic problem with scala.collection.JavaConversions. I would expect that following code would work but implicit conversion from java.util.List[String] to scala List[String] does not happen. Why?

import collection.JavaConversions._
import java.util
class Test {
  def getStrings() : List[String] = {
    val results : java.util.List[String] = new java.util.ArrayList[String]()
    results
  }
}

I get following message from compi

type mismatch;
 found   : java.util.List[String]
 required: scala.collection.immutable.List[String]
    results
    ^
like image 417
matt Avatar asked Aug 05 '13 09:08

matt


2 Answers

Convert it to:

def getStrings() : Seq[String] = {
    val results : java.util.List[String] = new java.util.ArrayList[String]()
    results
  }  

This is because, the implicit function for the conversion is defined as:

implicit def asScalaBuffer[A](l: java.util.List[A]): mutable.Buffer[A] 

It returns a mutable.Buffer and not scala.collection.immutable.List. Hence the error. So alternative is to use a Seq instead of List or convert it to a immutable.List as below:

def getStrings() : List[String] = {
    val results = new java.util.ArrayList[String]()     
    results.toList
}
like image 111
Jatin Avatar answered Oct 11 '22 00:10

Jatin


All you need to do is to import this:

import scala.collection.JavaConversions._
like image 24
pannu Avatar answered Oct 10 '22 23:10

pannu