在 scala 2.8 中使用 scala.collection.JavaConversions._ 时,scala 和 java 集合之间的自动转换

发布于 2024-11-19 01:12:54 字数 588 浏览 2 评论 0原文

我有返回此类型的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 集合之间进行隐式自动转换。

我也尝试过使用 like:

Foo.someJavaMethod().toList 

但这也不起作用。

这个问题的解决办法是什么?

I have java API which return this type:

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

In scala program, I need to send above type as a parameter to a scala function 'bar' whose type is

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

}

so I call bar like:

val list = bar(Foo.someJavaMethod())

but this does not work as I get compile error.

I thought have this import

import scala.collection.JavaConversions._ 

will do implicit automatic conversion between Java and Scala collections.

I also tried using like:

Foo.someJavaMethod().toList 

but that does not work either.

What is the solution to this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

随波逐流 2024-11-26 01:12:54

首先,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))

First, ArrayList does not convert to List, it converts to a Scala Buffer. Second, implicit conversion will not recurse into the elements of your collections.

You'll have to manually map the inner lists. Either with implicit conversions:

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

Or, more explicitly, if you prefer:

import collection.JavaConverters._
val f = Foo.someJavaMethod()
bar(f.asScala.toList.map(_.asScala.toList))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文