2010-04-25 11 views
34

कैसे scala.collection.JavaConversions स्टैक ओवरफ़्लो प्रश्न में दिए गए जवाब supercede करता Iterating over Java collections in Scala (क्योंकि "JCL" पैकेज चला गया है यह काम नहीं करता है) और Iterating over Map with Scala में (यह एक जटिल परीक्षा में मेरे लिए काम नहीं करता है जो मैं मैं उबालने और बाद में यहां पोस्ट करने की कोशिश करूंगा)।स्कैला 2.8.0 में जावा मानचित्र पर फिर से शुरू करने का नया तरीका क्या है?

उत्तरार्द्ध वास्तव में एक स्कैला मानचित्र प्रश्न है, लेकिन मुझे लगता है कि मुझे java.util.Map पर पुन: प्रयास करने के लिए दोनों उत्तरों को जानने की आवश्यकता है।

उत्तर

74

2.8 में, आप scala.collection.JavaConversions._ आयात करते हैं और स्कैला मानचित्र के रूप में उपयोग करते हैं। यहाँ एक उदाहरण है (2.8.0.RC1 में):

scala> val jmap:java.util.Map[String,String] = new java.util.HashMap[String,String] 
jmap: java.util.Map[String,String] = {} 

scala> jmap.put("Hi","there") 
res0: String = null 

scala> jmap.put("So","long") 
res1: String = null 

scala> jmap.put("Never","mind") 
res2: String = null 

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

scala> jmap.foreach(kv => println(kv._1 + " -> " + kv._2)) 
Hi -> there 
Never -> mind 
So -> long 

scala> jmap.keys.map(_.toUpperCase).foreach(println) 
HI 
NEVER 
SO 

आप विशेष रूप से एक स्काला इटरेटर, का उपयोग jmap.iterator (रूपांतरण आयात के बाद) चाहते हैं।

+0

वाह, यह एक महान, दर्द रहित समाधान है! – rasen58

+0

स्कैला मानचित्र में परिवर्तित किए बिना एक रास्ता होना चाहिए, है ना? यह बेहतर होगा अगर हम एक लूप में जावा मानचित्र पर पुनरावृत्त कर रहे हैं, तो यह अनावश्यक वस्तु निर्माण से बच जाएगा। प्राप्त करना "मिला: (स्ट्रिंग, स्ट्रिंग) => यूनिट आवश्यक: java.util.function.BiConsumer [_>: स्ट्रिंग, _>: स्ट्रिंग]" त्रुटि। –

+0

@ZxcvMnb - इन दिनों आपको 'JavaConverters' का उपयोग करना चाहिए और स्पष्ट रूप से उन्हें बदलना चाहिए; जावा 8 के 'फोरैच' विधि के अतिरिक्त, आप 'foreach' के लिए अब और अधिक रूपांतरण का उपयोग नहीं कर सकते हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे