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?
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 )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With