How can I convert Scala Map to Java Map with scala.Float to java.Float k/v conversion

前端 未结 4 780
梦如初夏
梦如初夏 2020-12-14 05:55

I would like to be able to perform the following, but it fails in the call to useMap. How can I perform this conversion?

scala> import scala.collection.Ja         


        
相关标签:
4条回答
  • Use scala predefined float2Float and use CollectionConverters to perform conversion explicitly.

    import scala.jdk.CollectionConverters._
    // Prior to Scala 2.13: import scala.collection.JavaConverters._
    val scalaMap = Map(1 -> 1.0F)
    val javaMap = scalaMap.map{ case (k, v) => k -> float2Float(v) }.asJava
    
    0 讨论(0)
  • 2020-12-14 06:27
    scala> v.asJava
    <console>:16: error: type mismatch;
     found   : java.util.Map[Int,scala.Float]
     required: java.util.Map[Integer,java.lang.Float]
    

    The type of v is Map[scala.Int, scala.Float], not Map[java.lang.Integer, java.lang.Float].

    You could try this:

    import java.lang.{Float => JFloat}
    useMap(v.map{ case (k, v) => (k: Integer) -> (v: JFloat)})
    
    0 讨论(0)
  • 2020-12-14 06:28

    The solution linked to by @pagoda_5b works: Scala convert List[Int] to a java.util.List[java.lang.Integer]

    scala> import collection.JavaConversions._
    import collection.JavaConversions._
    
    scala> val m = mapAsJavaMap(Map(1 -> 2.1f)).asInstanceOf[java.util.Map[java.lang.Integer, java.lang.Float]]
    m: java.util.Map[Integer,Float] = {1=2.1}
    
    scala> m.get(1).getClass
    res2: Class[_ <: Float] = class java.lang.Float
    
    0 讨论(0)
  • 2020-12-14 06:33

    Implicit conversions are sometimes hard to debug/understand and therefore I prefer explicit conversions as follows:

    import scala.collection.JavaConversions.mapAsJavaMap
    
    val scalaMap = Map(1 -> 1.0F)
    val javaMap = mapAsJavaMap(scalaMap)
    
    0 讨论(0)
提交回复
热议问题