2012-04-12 17 views
15

मैं जावा सूची के साथ स्कैला सूची की तुलना कैसे कर सकता हूं?जावा सूचियों के साथ स्कैला सूचियों की तुलना

scala> List(1, 2, 3, 4, 5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

scala> java.util.Arrays.asList(1, 2, 3, 4, 5) 
res1: java.util.List[Int] = [1, 2, 3, 4, 5] 

scala> res0 == res1 
res2: Boolean = false 

क्या तुलना के लिए कुछ स्थैतिक सहायक विधि है जो स्कैला सूचियों और जावा सूचियों दोनों को स्वीकार करती है? या क्या सूचियों के दोनों प्रकारों पर एक प्रकार का "आलसी रैपर" है जिसे मैं सीधे == के माध्यम से तुलना कर सकता हूं?

उत्तर

17

... या sameElements का उपयोग करें।

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

scala> res0.sameElements(res1)    
res3: Boolean = true 
+0

ध्यान दें कि यह जावा संग्रह को स्कैला बफर में लपेटने का कारण बनता है ('-Xprint: typer' का उपयोग करते समय दिखाया गया है)। यह कोड वास्तव में निष्पादित कोड है: 'res0.sameElements (asScalaBuffer (res1))' – robinst

+0

मुझे शायद यह स्पष्ट करना चाहिए कि मेरा उत्तर किसी और के उत्तर का उत्तर होता था, जिसमें उन्होंने कहा था कि आप दोनों स्कैला में अंतर्निहित रूपांतरण कर सकते हैं संग्रह और फिर तुलना करें, या प्रत्येक तत्व की तुलना एक-एक करके करें। फिर वह यह दिखाने के लिए चला गया कि आप यह कैसे कर सकते हैं: एक विधि है जो हर तत्व की तुलना करती है। मैं सिर्फ यह कहना चाहता था कि समानता के लिए प्रत्येक तत्व की तुलना करने का एक आसान तरीका है। इसलिए "... या 'समान एलीमेंट्स' का उपयोग करें। जिसका जवाब मैंने जवाब दिया है उसके बाद हटा दिया गया है। –

+0

तो मुझे लगता है कि दूसरा जवाब वास्तव में बेहतर उत्तर है। मुझे इसके लिए वोट दें। –

12

आप इस के लिए JavaConverters उपयोग कर सकते हैं:

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

scala> res0 == res1.asScala 
res2: Boolean = true 

ध्यान दें कि asScala केवल मूल List पर एक दृश्य देता है, JavaConverters दस्तावेज में asScalaBufferConverter के दस्तावेज़ देखें।

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