现在,我只有3种方法来比较scala中的两个迭代器(带有String类型):
// 1.
it1 sameElements it2
// 2.
it2.toList == it2.toList
// 3.
def compare(it1:Iterator[String], it2:Iterator[String]) {
while (it1.hasNext) {
if (!it2.hasNext) return false
if (it1.next != it2.next) {
return false
}
}
return !it2.hasNext
}
还有其他好办法吗?
答案 0 :(得分:3)
我会使用zip:
def compare(it1:Iterator[String], it2:Iterator[String]) = {
it1.zip(it2).forall(x => x._1 == x._2) &&
(it1.length == it2.length)
}
或者您也可以使用尾递归:
def compare(it1:Iterator[String], it2:Iterator[String]) : Boolean = {
(it1 hasNext, it2 hasNext) match{
case (true, true) => (it1.next == it2.next) && compare(it1, it2)
case (false, false) => true
case _ => false
}
}
用于sameElements
的函数,我推荐它在API中使用,我修改了source签名以提高可读性
def compare(it1:Iterator[String], it2:Iterator[String]) = {
while (it1.hasNext && it2.hasNext)
if (it1.next != it2.next) return false
!hasNext && !that.hasNext
}
答案 1 :(得分:0)
使用canEqual:
@annotation.tailrec
def compare(it1:Iterator[String], it2:Iterator[String]) : Boolean = {
Try(it1.next()).canEqual(Try(it2.next())) && compare(it1, it2)
}