2010-06-27 11 views
27

मैं java.util.Map [स्ट्रिंग, ऑब्जेक्ट] को scala.collection.immutable.Map में कैसे परिवर्तित करूं [ स्ट्रिंग, कोई भी], ताकि मूल मानचित्र (पूर्णांक, बूलियन इत्यादि) में सभी मान स्कैला में अच्छी तरह से काम करने के लिए सही मूल्य में परिवर्तित हो जाएं।java.util.Map [स्ट्रिंग, ऑब्जेक्ट] को scala.collection.immutable.Map में कनवर्ट करें [स्ट्रिंग, कोई भी]

+0

जोड़ा गया टैग ----- – pakore

+0

मैं स्केला पता नहीं है, लेकिन आप अगर ऐसा नहीं कर सकते (पूर्णांक instanceof objecdt) ... और इसलिए पर? यह सबसे अच्छा तरीका नहीं है लेकिन इसे काम करना चाहिए ... हो सकता है कि आप ऑब्जेक्ट्स को लपेटें और विज़िटर पैटर्न का उपयोग कर सकें ... – pakore

उत्तर

32

VonC कहते हैं, scala.collections.JavaConversion केवल परिवर्तनशील संग्रह का समर्थन करता है, लेकिन आप एक अलग पुस्तकालय का उपयोग करने की जरूरत नहीं है। परिवर्त्य संग्रह TraversableOnce जो एक toMap विधि है कि अपरिवर्तनीय मानचित्र रिटर्न को परिभाषित करता है से प्राप्त कर रहे:

import scala.collection.JavaConversions._ 

val m = new java.util.HashMap[String, Object]() 
m.put("Foo", java.lang.Boolean.TRUE) 
m.put("Bar", java.lang.Integer.valueOf(1)) 

val m2: Map[String, Any] = m.toMap 
println(m2) 

हो जाएगा ताकि उत्पादन

Map(Foo -> true, Bar -> 1) 
+0

जो मेरे प्रश्न का उत्तर देते हैं। मेरे अधिक विशिष्ट मामले में, मुझे मानचित्र के मूल्यों पर नक्शा लगाने की आवश्यकता थी, इसलिए m.map {...} (breakOut) ने चाल भी – IttayD

+0

नाइस किया - यह मेरे लिए काम किया! – javadba

1

JavaConversions स्कैला 2.8 का पैकेज केवल उत्परिवर्तनीय संग्रह के साथ ही है।

scalaj-collection लाइब्रेरी यहां सहायता कर सकती है।

java.util.Map[A, B]  #asScala: scala.collection.Map[A, B] 
          #asScalaMutable: scala.collection.mutable.Map[A, B] 
          #foreach(((A, B)) => Unit): Unit 
+0

जावा कॉन्फ़्रेंस केवल मैप ऑब्जेक्ट का मैपिंग है, न कि उसके मान – IttayD

1

क्रम में बदलने का java.util.Map [स्ट्रिंग, वस्तु] बदलने के लिए scala.collection.immutable.Map [स्ट्रिंग, ऑब्जेक्ट], आपको स्कैला प्रोजेक्ट और क्लीन बिल्ड में नीचे दिए गए कथन को सरल बनाना होगा।

import collection.JavaConversions._ 

कोड के नीचे देखें:

var empMap= Map[String.Object]() 
var emp= new Employee(empMap) // Employee is java POJO in which,passing scala map to overloaded constructor for setting default values. 
संबंधित मुद्दे