27

मैं निम्नलिखित करने में सक्षम होना चाहता हूं, लेकिन यह मैप का उपयोग करने के लिए कॉल में विफल रहता है। मैं यह रूपांतरण कैसे कर सकता हूं?मैं स्कैला मानचित्र को जावा मानचित्र में स्कैला के साथ कैसे परिवर्तित कर सकता हूं। जावा से फ़्लोट करें। फ्लोट के/वी रूपांतरण

scala> import scala.collection.JavaConversions._ 
import scala.collection.JavaConversions._ 

scala> import scala.collection.JavaConverters._ 
import scala.collection.JavaConverters._ 

scala> def useMap(m: java.util.Map[java.lang.Integer, java.lang.Float]) = m 
useMap: (m: java.util.Map[Integer,Float])java.util.Map[Integer,Float] 

scala> val v: Map[Int, Float] = Map() 
v: Map[Int,Float] = Map() 

scala> useMap(v) 
<console>:10: error: type mismatch; 
found : scala.collection.immutable.Map[Int,scala.Float] 
required: java.util.Map[Integer,java.lang.Float] 
       useMap(v) 
        ^

यह मानचित्र [स्ट्रिंग, स्ट्रिंग] के साथ काम करता प्रतीत होता है, लेकिन मानचित्र [Int, Float] नहीं।

+2

देखो [http://stackoverflow.com/questions/6991340/scala-convert-listint-to-a-java-util-listjava-lang-integer](http://stackoverflow.com/ प्रश्न/69 9 1340/स्कैला-कन्वर्ट-लिस्टिंट-टू-ए-जावा-यूज-लिस्टजवा-लैंग-इंटीजर) –

उत्तर

33

समाधान से जुड़ा हुआ @ pagoda_5b से काम करता है: स्केला 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 
3
scala> v.asJava 
<console>:16: error: type mismatch; 
found : java.util.Map[Int,scala.Float] 
required: java.util.Map[Integer,java.lang.Float] 

v के प्रकार Map[scala.Int, scala.Float], नहीं Map[java.lang.Integer, java.lang.Float] है।

आप इस कोशिश कर सकते:

import java.lang.{Float => JFloat} 
useMap(v.map{ case (k, v) => (k: Integer) -> (v: JFloat)}) 
+0

मैंने डेटा को मैन्युअल रूप से परिवर्तित करने के बारे में सोचा था, लेकिन सौभाग्य से एक और "स्वचालित" दृष्टिकोण उपलब्ध है, pagoda_5b द्वारा टिप्पणी देखें – rvange

5

उपयोग float2Float पूर्वनिर्धारित और JavaConverters का उपयोग स्पष्ट रूप से रूपांतरण करने के लिए। पर

import scala.collection.JavaConverters._ 
val scalaMap = Map(1 -> 1.0F) 
val javaMap = scalaMap.map{ case (k, v) => k -> float2Float(v) }.asJava 
संबंधित मुद्दे