2

我有返回这种类型的java API:

ArrayList[ArrayList[String]] = Foo.someJavaMethod()   

在 scala 程序中,我需要将上述类型作为参数发送到类型为的 scala 函数“bar”

def bar(param: List[List[String]]) : List[String] = {

}

所以我称 bar 为:

val list = bar(Foo.someJavaMethod())

但这不起作用,因为我得到编译错误。

我以为有这个进口

import scala.collection.JavaConversions._ 

将在 Java 和 Scala 集合之间进行隐式自动转换。

我也尝试过使用:

Foo.someJavaMethod().toList 

但这也不起作用。

这个问题的解决方案是什么?

4

1 回答 1

7

首先,ArrayList不转换为List,而是转换为 Scala Buffer。其次,隐式转换不会递归到集合的元素中。

您必须手动映射内部列表。无论是隐式转换:

import collection.JavaConversions._
val f = Foo.someJavaMethod()
bar(f.toList.map(_.toList))

或者,更明确地说,如果您愿意:

import collection.JavaConverters._
val f = Foo.someJavaMethod()
bar(f.asScala.toList.map(_.asScala.toList))
于 2011-07-07T12:00:20.693 回答