将 Map[String, Double] 转换为 java.util.Map[String, java.lang.Double] [英] Converting Map[String, Double] to java.util.Map[String, java.lang.Double]

查看:43
本文介绍了将 Map[String, Double] 转换为 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.StringDouble 是一个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆