java - In Java, how to convert scala.list to java.list
问题描述
In Java, I already have a scala.collection.mutable.wrappedArray
object. How can I convert it to util.ArrayList
or util.linkedList
in Java? Or alternatively, How can I iterate it and do something with each value of it? foreach
is not applicable.
解决方案
我不想声称scala.collection.mutable.wrappedArray
从你的 Java 代码中使用 a 是“不可能的”,但在我看来,如果你问这样的问题,那么你做错了。
Scala 的标准库确实提供了很多功能来在 Scala 数据结构和 Java 数据结构之间进行转换。
Java 标准库没有提供任何工具来处理 Scala 集合,它对 Scala 完全一无所知。
因此,“我如何在 Java 中scala.x.y.Z
转换”java.r.s.T
这个问题本质上是没有意义的:不要尝试在 Java 中执行转换,在 Scala 中执行,它会容易得多。
一般的做法
假设你有一个foo
在 Scala 中实现的方法,它返回一个 Scala 特定的数据结构scala.x.y.Z
:
// Scala code
def foo(): scala.x.y.Z = ???
显然,你想要做的是:
// Java code
scala.x.y.Z a = yourScalaLibrary.foo();
java.r.s.T b = /*
crazily complex java code
that converts scaa.x.y.Z to java.r.s.T
*/
我的建议是:不要这样做。相反,在 Scala 中实现一个额外的 Java 特定 API :
// Scala code
def javaFoo(): java.r.s.T = {
scala.x.y.Z a = foo()
java.r.s.T b = /* simple conversion code using Scala-Java interop */
b // return Java-specific collection
}
然后在您的 Java 代码中仅使用 Java-API:
// Java code
java.r.s.T b = javaFoo();
具体例子
假设您想从 Java 中使用此方法:
def foo(): scala.collection.mutable.WrappedArray[Int] = Array(1, 2, 3)
您首先实现一个 java-API(在 Scala 中!):
import collection.JavaConverters._
def javaFoo(): java.util.List[Int] = foo().asJava
然后从 Java 中使用它:
java.util.List myList = javaFoo();
推荐阅读
- csv - 读取多个文件的替代行并将它们聚合到单个 CSV
- python-3.x - 如何更改熊猫中列名的位置?
- cmd - 在 NetBeans 中安装、配置和测试 WebLogic Server 12c Developer Zip Distribution
- ruby-on-rails - 创建一个 JSON 对象发送回客户端
- javascript - 仅传递不带引号的对象的 ID 名称
- c# - 使用 For 循环中的 WebElement 索引遍历 HTML 表中的“tr”行
- javascript - Knockoutjs vm 没有绑定到正确的元素
- kendo-grid - Angular2 Kendo在过滤器更改后获取或读取网格结果
- macos - 在 MacOS 上使用 Julia 0.7.0 的 TensorFlow.jl 出现分段错误
- unity3d - 如何在 Unity 中构建问答