比较Scala列表和Java列表

15

我该如何比较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列表?或者是否有一种“惰性包装器”可以覆盖这两种类型的列表,然后可以直接通过==进行比较?

2个回答

18

... 或使用 sameElements

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

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

请注意,这也会导致Java集合被包装在Scala缓冲区中(使用-Xprint:typer时显示)。这是实际执行的代码:res0.sameElements(asScalaBuffer(res1)) - robinst
我应该澄清一下,我的回答曾是对某个人的回答,他说你可以隐式转换为Scala集合然后进行比较,或者一个一个比较每个元素。他接着展示了如何实现:有一个比较每个元素的方法。我只想说有一种更简单的方法来比较每个元素是否相等,即使用sameElements。在那之后,我所回复的问题已被删除。 - Wilfred Springer
所以我认为另一个答案实际上是更好的答案。让我投票支持那个。 - Wilfred Springer

13

您可以使用JavaConverters来实现这一功能:

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

scala> res0 == res1.asScala
res2: Boolean = true
请注意,asScala仅返回原始List上的视图,请参阅JavaConverters文档中asScalaBufferConverter的说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接