Итератор в Scala
Scala Iterator — это не коллекция; это метод для доступа к коллекциям.
Две основные операции итератора it:nextиhasNext。
Вызовit.next()вернёт следующий элемент итератора и обновит состояние итератора.
Вызовit.hasNext()используется для проверки, есть ли в коллекции ещё элементы.
Самый простой способ заставить итератор it возвращать все элементы по одному — использовать цикл while:
Пример
def main(args: Array[String]) {
val it = Iterator("Baidu", "Google", "Example", "Taobao")
while (it.hasNext){
println(it.next())
}
}
}
Выполнение приведенного выше кода дает следующий вывод:
$ scalac Test.scala $ scala Test Baidu Google Example Taobao
Поиск максимального и минимального элементов
Вы можете использоватьit.minиit.maxметоды, чтобы найти максимальный и минимальный элементы из итератора, как показано в следующем примере:
Пример
def main(args: Array[String]) {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Наибольший элемент:" + ita.max )
println("Наименьший элемент:" + itb.min )
}
}
Выполнение приведенного выше кода дает следующий вывод:
$ scalac Test.scala $ scala Test 最大元素是:90 最小元素是:2
Получение длины итератора
Вы можете использоватьit.sizeилиit.lengthметоды для просмотра количества элементов в итераторе. Примеры приведены ниже:
Пример
def main(args: Array[String]) {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Значение ita.size: " + ita.size )
println("Значение itb.length: " + itb.length )
}
}
Выполнение приведенного выше кода дает следующий вывод:
$ scalac Test.scala $ scala Test ita.size 的值: 6 itb.length 的值: 6
Общие методы Scala Iterator
В следующей таблице перечислены общие методы Scala Iterator:
| Нет. | Метод и описание |
|---|---|
| 1 |
def hasNext: Boolean Возвращает true, если есть элементы, которые можно вернуть. |
| 2 |
def next(): A Возвращает следующий элемент итератора и обновляет состояние итератора. |
| 3 |
def ++(that: => Iterator[A]): Iterator[A] Объединяет два итератора |
| 4 |
def ++[B >: A](that :=> GenTraversableOnce[B]): Iterator[B] Объединяет два итератора |
| 5 |
def addString(b: StringBuilder): StringBuilder Добавляет строку в StringBuilder b |
| 6 |
def addString(b: StringBuilder, sep: String): StringBuilder Добавляет строку в StringBuilder b и указывает разделитель |
| 7 |
def buffered: BufferedIterator[A] Преобразует итератор в BufferedIterator |
| 8 |
def contains(elem: Any): Boolean Проверяет, содержит ли итератор указанный элемент |
| 9 |
def copyToArray(xs: Array[A], start: Int, len: Int): Unit Копирует выбранные значения из итератора в массив |
| 10 |
def count(p: (A) => Boolean): Int Возвращает общее количество элементов в итераторе, удовлетворяющих условию p. |
| 11 |
def drop(n: Int): Iterator[A] Возвращает новую коллекцию, которая отбрасывает первые n элементов |
| 12 |
def dropWhile(p: (A) => Boolean): Iterator[A] Отбрасывает элементы слева направо, пока условие p не станет ложным |
| 13 |
def duplicate: (Iterator[A], Iterator[A]) Создаёт два итератора, каждый из которых может вернуть все элементы итератора. |
| 14 |
def exists(p: (A) => Boolean): Boolean Возвращает значение Boolean, указывающее, существует ли среди элементов итератора элемент, удовлетворяющий p. |
| 15 |
def filter(p: (A) => Boolean): Iterator[A] Возвращает новый итератор, указывающий на все элементы итератора, удовлетворяющие условию p. |
| 16 |
def filterNot(p: (A) => Boolean): Iterator[A] Возвращает итератор, указывающий на элементы итератора, не удовлетворяющие условию p. |
| 17 |
def find(p: (A) => Boolean): Option[A] Возвращает первый элемент, удовлетворяющий p, или None. Примечание: если элемент, удовлетворяющий условию, найден, итератор позиционируется после этого элемента; если не найден, он позиционируется в конце. |
| 18 |
def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B] Применяет функцию f к каждому элементу в последовательности итератора и возвращает итератор, указывающий на результирующую последовательность. |
| 19 |
def forall(p: (A) => Boolean): Boolean Возвращает значение Boolean, указывающее, удовлетворяют ли p все элементы, на которые он указывает. |
| 20 |
def foreach(f: (A) => Unit): Unit Выполняет указанную процедуру f для каждого элемента, возвращаемого итератором. |
| 21 |
def hasDefiniteSize: Boolean Возвращает true, если итератор имеет конечное число элементов (по умолчанию эквивалентно isEmpty) |
| 22 |
def indexOf(elem: B): Int Возвращает первый элемент в итераторе, индекс которого равен x. Примечание: итератор пропустит этот элемент. |
| 23 |
def indexWhere(p: (A) => Boolean): Int Возвращает элемент в итераторе, индекс которого удовлетворяет условию p. Примечание: итератор пропустит этот элемент. |
| 24 |
def isEmpty: Boolean Проверяет, пуст ли он; возвращает true, если пуст, иначе возвращает false (противоположно hasNext). |
| 25 |
def isTraversableAgain: Boolean Проверяет, можно ли повторно обходить этот Iterator. |
| 26 |
def length: Int Возвращает количество элементов в итераторе. |
| 27 |
def map[B](f: (A) => B): Iterator[B] Создаёт новый итератор из результатов передачи каждого его элемента в функцию f. |
| 28 |
def max: A Возвращает наибольший элемент среди элементов итератора. |
| 29 |
def min: A Возвращает наименьший элемент среди элементов итератора. |
| 30 |
def mkString: String Преобразует все элементы итератора в строку. |
| 31 |
def mkString(sep: String): String Преобразует все элементы итератора в строку и задаёт разделитель. |
| 32 |
def nonEmpty: Boolean Проверяет, содержит ли контейнер элементы (эквивалентно hasNext). |
| 33 |
def padTo(len: Int, elem: A): Iterator[A] Сначала возвращает все элементы итератора, затем добавляет копии elem, пока длина не достигнет len. |
| 34 |
def patch(from: Int, patchElems: Iterator[B], replaced: Int): Iterator[B] Возвращает новый итератор, в котором заменяемые элементы, начиная с from-го элемента, заменяются элементами, на которые указывает итератор. |
| 35 |
def product: A Возвращает произведение числовых элементов, на которые ссылается итератор. |
| 36 |
def sameElements(that: Iterator[_]): Boolean Определяет, возвращают ли итератор и указанный параметр-итератор одни и те же элементы в одной и той же последовательности. |
| 37 |
def seq: Iterator[A] Возвращает представление коллекции в виде последовательности. |
| 38 |
def size: Int Возвращает количество элементов в итераторе. |
| 39 |
def slice(from: Int, until: Int): Iterator[A] Возвращает новый итератор, указывающий на срез последовательности, на которую указывает итератор, начиная с элемента с индексом from и заканчивая элементом с индексом until. |
| 40 |
def sum: A Возвращает сумму числовых элементов, на которые ссылается итератор. |
| 41 |
def take(n: Int): Iterator[A] Возвращает новый итератор первых n элементов. |
| 42 |
def toArray: Array[A] Собирает все элементы, на которые указывает итератор, в массив и возвращает его. |
| 43 |
def toBuffer: Buffer[B] Копирует все элементы, на которые указывает итератор, в буфер Buffer. |
| 44 |
def toIterable: Iterable[A] Возвращает Iterable, содержащий все элементы этого Traversable или итератора. Для бесконечных итераторов это не завершится. |
| 45 |
def toIterator: Iterator[A] Собирает все элементы итератора в контейнер Iterator и возвращает его. |
| 46 |
def toList: List[A] Собирает все элементы итератора в список и возвращает его. |
| 47 |
def toMap[T, U]: Map[T, U] Собирает все пары ключ-значение итератора в Map и возвращает его. |
| 48 |
def toSeq: Seq[A] Собирает все элементы итератора в контейнер Seq и возвращает его. |
| 49 |
def toString(): String Преобразует итератор в строку. |
| 50 |
def zip[B](that: Iterator[B]): Iterator[(A, B) Возвращает новый итератор, указывающий на последовательность двухэлементных кортежей, образованных попарным сопоставлением элементов итератора с элементами указанного итератора один к одному. |
Для других методов, пожалуйста, обратитесь кдокументации API
Другие расширения
Коллекции в Scala