如何将java.util.List [java.lang.Double]转换为Scala的列表[Double]?

时间:2014-05-23 05:30:18

标签: java scala implicit-conversion

我希望以有效的方式将Java双打的Java列表(java.util.List [java.lang.Double])转换为Scala双打的Scala列表(List [Double])。 / p>

目前,我在列表上进行映射,将每个Double值转换为Scala Double。我不希望映射每个值,并且正在寻找一种更有效的方法。

import collection.JavaConversions._
import collection.mutable.Buffer

val j: java.util.List[java.lang.Double] = Buffer(new java.lang.Double(1.0), new java.lang.Double(2.0))
val s: List[Double] = ...

我已经看过来自Scala的文档 - > Java,但没有太多其他方式。

2 个答案:

答案 0 :(得分:19)

建议使用JavaConverters,而不是JavaConversions

import collection.JavaConverters._
import scala.collection.breakOut
val l: List[Double] = j.asScala.map(_.doubleValue)(breakOut)

doubleValue会将其从java.lang.Double转换为scala.DoublebreakOut告诉它生成List作为map的结果,而不必再次遍历它以转换为List。如果你不关心额外的遍历,你也可以toList而不是breakOut

Java类与Scala完全不同;这不仅仅是改变名称。因此,没有遍历就不可能进行转换。你必须创建一个全新的集合,然后查看每个元素以便(转换它)并将其移动。

类型不同的原因是java.lang.Double是一个“盒装基元”,而scala.Double相当于Java的双基元。这里的转换基本上是“拆箱”原语。

答案 1 :(得分:0)

import collection.JavaConverters._

val javaList : java.util.List[Double] = ...
val scalaList : List[Double] = j.asScala.toList