将Scala缓冲区转换为Java ArrayList

Ing*_*her 8 java scala scala-2.8

在我的Scala函数中,我遍历Java ArrayCollection,提取应该构成新集合的特定元素.最后,它必须再次成为Java-ArrayList,因为我正在与Java Framework交互.我的代码:

// 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
Run Code Online (Sandbox Code Playgroud)

如何将Buffer转换为ArrayList [User]?或者我不应该在这里使用收益率?

Cal*_*lum 8

您应该能够通过指定您想要的类型来将其转换回来buffer(JavaConversions当您尝试获取的类型与您所拥有的类型不兼容时,应该自动启用它):

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

或者,JavaConversions如果您想清楚地知道自己在做什么,可以明确地调用转换:

val buffer = asList( for ( ... ) ) // buffer should have type "java.util.List[User]"
Run Code Online (Sandbox Code Playgroud)

这些都没有实际产生ArrayList; 相反,它们创建了一个泛型List,但直接指定集合类型通常是不好的做法.如果你必须有一个ArrayList,你传递List给的构造函数ArrayList,这需要Collection:

new ArrayList( buffer )
Run Code Online (Sandbox Code Playgroud)