में मैप मेरे जावा कोड से कुछ स्कैला लाइब्रेरी का उपयोग कर रहा हूं। और मुझे संग्रह के साथ एक समस्या है। मुझे विधि के पैरामीटर के रूप में scala.collection.immutable.Map
पास करने की आवश्यकता है। मैं अपने जावा कोड से immutable.Map
को परिवर्तित या निर्माण कर सकता हूं लेकिन मुझे नहीं पता कि यह कैसे करें। सुझाव?java.util.HashMap को scala.collection.immutable में कनवर्ट करें। जावा
14
A
उत्तर
0
क्या आप एक अतिरिक्त एपीआई कॉल प्रदान कर सकते हैं जो JavaConverters का उपयोग करके java.util.Map को परिवर्तित/प्रदान करता है?
class Example {
import scala.collection.JavaConverters._
def fromMap(m:Map[...]) = ...
// generics etc. elided
def fromJava(m:java.util.Map) = {
fromMap(m.asScala.toMap)
}
}
आप रूपांतरण निकालने और (विशेष रूप से के रूप में मैं ध्यान दें कि आप एक स्काला पुस्तकालय के लिए काम कर रहे हैं) एक डेकोरेटर भी प्रदान कर सकते। नोट dhg की टिप्पणी फिर से। अचल स्थिति।
17
यह जावा में JavaConverters
उपयोग करने के लिए पूरी तरह से संभव है कोड-वहाँ सिर्फ अतिरिक्त हुप्स के एक जोड़े के माध्यम से कूदने के लिए कर रहे हैं:
import java.util.HashMap;
import scala.Predef;
import scala.Tuple2;
import scala.collection.JavaConverters;
import scala.collection.immutable.Map;
public class ToScalaExample {
public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) {
return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
Predef.<Tuple2<A, B>>conforms()
);
}
public static HashMap<String, String> example() {
HashMap<String, String> m = new HashMap<String, String>();
m.put("a", "A");
m.put("b", "B");
m.put("c", "C");
return m;
}
}
हम दिखा सकते हैं कि इस स्काला आरईपीएल से काम करता है:
scala> val jm: java.util.HashMap[String, String] = ToScalaExample.example
jm: java.util.HashMap[String,String] = {b=B, c=C, a=A}
scala> val sm: Map[String, String] = ToScalaExample.toScalaMap(jm)
sm: Map[String,String] = Map(b -> B, c -> C, a -> A)
लेकिन निश्चित रूप से आप जावा कोड से इन विधियों को आसानी से कॉल कर सकते हैं।
0
यह जावा 1.8 के साथ मेरे लिए काम किया और स्केला 2.12:
public static <K, V> scala.collection.immutable.Map<K, V> toScalaImmutableMap(java.util.Map<K, V> jmap) {
List<Tuple2<K, V>> tuples = jmap.entrySet()
.stream()
.map(e -> Tuple2.apply(e.getKey(), e.getValue()))
.collect(Collectors.toList());
Seq<Tuple2<K, V>> scalaSeq = JavaConverters.asScalaBuffer(tuples).toSeq();
return (Map<K, V>) Map$.MODULE$.apply(scalaSeq);
}
1
जावा 1.7 और स्काला 2.11 के लिए मेरे समाधान:
@SuppressWarnings("unchecked")
private static <K, V> scala.collection.immutable.Map<K, V> toScalaImmutableMap(java.util.Map<K, V> javaMap) {
final java.util.List<scala.Tuple2<K, V>> list = new java.util.ArrayList<>(javaMap.size());
for (final java.util.Map.Entry<K, V> entry : javaMap.entrySet()) {
list.add(scala.Tuple2.apply(entry.getKey(), entry.getValue()));
}
final scala.collection.Seq<Tuple2<K, V>> seq = scala.collection.JavaConverters.asScalaBufferConverter(list).asScala().toSeq();
return (scala.collection.immutable.Map<K, V>) scala.collection.immutable.Map$.MODULE$.apply(seq);
}
संबंधित मुद्दे
- 1. scala.collection.immutable का उपयोग कैसे करें। जावा कोड
- 2. scala.collection.immutable का उपयोग क्यों करें।
- 3. जावा में स्ट्रिंग को क्लोब में कनवर्ट करें
- 4. जावा में आउटपुटस्ट्रीम में स्ट्रीमवाइटर को कनवर्ट करें?
- 5. जावा या सी ++ में लेटेक्स को एचटीएमएल में कनवर्ट करें?
- 6. जावा को आईओएस में कनवर्ट करना
- 7. जावा: charAt int में कनवर्ट करें?
- 8. वीडियो अनुक्रम को वीडियो फ़ाइल में कनवर्ट करें एंड्रॉइड जावा
- 9. जावा कोड को कोड कोड में कनवर्ट करें
- 10. स्ट्रिंग को वैध जावा वैरिएबल नाम में कनवर्ट करें
- 11. जावा स्विंग को वेब-आधारित एप्लिकेशन में कनवर्ट करें
- 12. जावा मानचित्र को जावास्क्रिप्ट मानचित्र में कनवर्ट करें
- 13. जावा परिणाम को स्ट्रिंग सरणी में कनवर्ट करें
- 14. जावा स्ट्रिंग को बाइट सरणी में कनवर्ट करें
- 15. जावा स्ट्रिंग को sql में कनवर्ट करें। टिमस्टैम्प
- 16. एक्सएमएल को जावा ऑब्जेक्ट्स में कनवर्ट करना
- 17. स्ट्रिंग को गणितीय मूल्यांकन में कनवर्ट करें
- 18. शब्द (.docx) को दस्तावेज़ में कनवर्ट करें
- 19. जावा MouseEvent ActionEvent में कनवर्ट
- 20. जावा में थंबनेल छवि में पीडीएफ कनवर्ट करें
- 21. जावा में .csv से .xls में कनवर्ट करें
- 22. जावा में HashMap.toString() वापस HashMap में कनवर्ट करें
- 23. ग्रहण में एंड्रॉइड प्रोजेक्ट में मौजूदा प्रोजेक्ट को कनवर्ट करें?
- 24. स्ट्रिंग को डबल में कनवर्ट करें - वीबी
- 25. सीएसटींग को वर्ण सरणी में कनवर्ट करें?
- 26. बिटमैप को बाइट सरणी में कनवर्ट करें
- 27. java.util.Set को scala.collection में कनवर्ट करें।
- 28. कॉमा को पूर्णांक में कनवर्ट करें
- 29. इनपुटस्ट्रीम (छवि) को ByteArrayInputStream में कनवर्ट करें
- 30. जेननेल को छवि में कनवर्ट करें
कोई "toMap" विधि किसी भी अधिक है। उपरोक्त कोड जावा 1.7 और स्कैला 2.11 :( –
जेडीके 1.8 के लिए संकलित नहीं किया जा सकता है, यह दिखाता है "स्कैला का उपयोग नहीं कर सकता। प्रीफिफ़। $ कम $ कोलन $ कम" त्रुटि – Freedom