将 Map[String, Double] 转换为 java.util.Map[String, java.lang.Double] [英] Converting Map[String, Double] to java.util.Map[String, java.lang.Double]
问题描述
我认为我们可以依靠隐式转换将 scala.Double
转换为 java.lang.Double
.所以我尝试了以下方法:
I thought we can rely on implicit conversion which converts scala.Double
to java.lang.Double
. So I tried the following:
import scala.collection.JavaConverters._
object Main extends App {
def main(args: Array[String]) = {
val m = Map("10" -> 20.0)
doSome(m.asJava) //error. Type mismatch found: java.util.Map[String,scala.Double]
// required: java.util.Map[String,java.lang.Double]
doSome2(m.asJava)
}
def doSome(m: java.util.Map[java.lang.String, java.lang.Double]) = println(m)
def doSome2(m: java.util.Map[java.lang.String, Double]) = println(m)
}
为什么不起作用?执行这种转换的惯用方法是什么?
Why doesn't it work? What would be the idiomatic way to perform such a conversion?
推荐答案
您需要double
的盒装版本:
import scala.collection.JavaConverters._
m.mapValues(Double.box).asJava
隐式能够将 Double
的值转换为 java.lang.Double
,但不能将 Map[String,Double]
到 java.util.Map[String,java.lang.Double]
.
The implicits are able to convert a value of Double
to java.lang.Double
, but not a Map[String,Double]
to java.util.Map[String,java.lang.Double]
.
String
不需要转换,因为 String
是一个 java.lang.String
而 Double
是一个 double
(原始).
String
requires no conversion because String
is a java.lang.String
while Double
is a double
(primitive).
这篇关于将 Map[String, Double] 转换为 java.util.Map[String, java.lang.Double]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!