Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a Scala Buffer to Java ArrayList

In my Scala function, i'm traversing a Java ArrayCollection, extracting specific elements which should form a new collection. At the end, it has to be a Java-ArrayList again, because i'm interacting with a Java Framework. My Code:

// to make scala-style iterating over arraylist possible
import scala.collection.JavaConversions._

// ArrayList contains elements of this type:
class Subscription(val subscriber:User, val sender:User)

// I'm getting this list from Java:
val jArrayList = new ArrayList[Subscription]
// Buffer:scala.collection.mutable.Buffer[User]
val buffer = for (val subscription <- jArrayList ) yield subscription.sender

How can i convert the Buffer to an ArrayList[User]? Or shouldn't i use yield here?

like image 486
Wolkenarchitekt Avatar asked Jul 20 '10 11:07

Wolkenarchitekt


1 Answers

You should be able to convert it back by specifying what type you'd like buffer to be (JavaConversions should be brought into play automatically when the type you're trying to get and the one you have are incompatible):

val buffer: java.util.List[User] =
  for (val subscription <- jArrayList ) yield subscription.sender

Alternatively you can call the conversion from JavaConversions explicitly if you want to make it clear what you're doing:

val buffer = asList( for ( ... ) ) // buffer should have type "java.util.List[User]"

Neither of these actually produce an ArrayList; rather, they create a generic List, but it's generally bad practice to specify collection types directly. If you must have an ArrayList, pass your List to the constructor of ArrayList which takes a Collection:

new ArrayList( buffer )
like image 166
Calum Avatar answered Sep 22 '22 18:09

Calum