Я бы использовал 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, я изменила исходную сигнатуру для удобства чтения
def compare(it1:Iterator[String], it2:Iterator[String]) = {
while (it1.hasNext && it2.hasNext)
if (it1.next != it2.next) return false
!hasNext && !that.hasNext
}