2012-04-12 84 views
15

如何將Scala列表與Java列表進行比較?將Scala列表與Java列表進行比較

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 

是否有一些接受Scala列表和Java列表的靜態幫助方法?或者在兩種列表上都有一種「惰性包裝」,我可以通過==直接進行比較?

回答

17

...或使用sameElements

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

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

請注意,這也會導致Java集合被封裝在Scala緩衝區中(使用'-Xprint:typer'時顯示)。這是實際執行的代碼:'res0.sameElements(asScalaBuffer(res1))' – robinst 2012-04-13 08:29:47

+0

我應該澄清一下,我的答案曾經是回覆別人的答案,他說你可以隱式轉換爲Scala收集並比較,或逐一比較每個元素。然後,他繼續展示如何做到這一點:有一種方法可以比較每個元素。我只是想說,有一種更簡單的方法來比較每個元素的平等。因此,「......或使用'sameElements'。我回應的答案在此之後已被刪除。 – 2012-04-13 10:02:40

+0

所以我認爲其他答案實際上是更好的答案,讓我爲此投票。 – 2012-04-13 10:03:37

12

您可以使用JavaConverters此:

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

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

注意,asScala只返回原始List視圖,請參閱JavaConverters文檔asScalaBufferConverter文檔。