2012-04-12 83 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文档。