English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Итераторы (Iterator) в Scala

Сборники Scala

Scala Iterator (итератор) не является集合ом, это метод для доступа к集合у.

Два основных действия итератора it: next и hasNext.

Вызов it.next() возвращает следующий элемент итератора, а также обновляет состояние итератора.

Вызов it.hasNext() для проверки наличия элементов в наборе.

Самый простой способ позволить итератору it по очереди возвращать все элементы - это использовать цикл while:

object Test {
   def main(args: Array[String]) {
      val it = Iterator("Baidu", "Google", "w3codebox", "Taobao")
      
      while (it.hasNext){
         println(it.next())
      }
   }
}

выполнить вышеуказанный код, результат вывода:

$ scalac Test.scala 
$ scala Test
Baidu
Google
w3codebox
Taobao

поиск минимального и максимального элементов

Вы можете использовать it.min и it.max Методы для поиска минимального и максимального элементов в итераторе. Пример приведен ниже:

object Test {
   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 Методы для просмотра количества элементов в итераторе. Пример приведен ниже:

object Test {
   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 не станет false.

13

def duplicate: (Iterator[A], Iterator[A])

Генерирует два итератора, которые могут возвращает все элементы итератора.

14

def exists(p: (A) => Boolean): Boolean

Возвращает логическое значение, указывающее, exists ли в элементах итератора элемент, satisfying условие p.

15

def filter(p: (A) => Boolean): Iterator[A]

Возвращает новый итератор, указывающий на все элементы итератора, satisfying условие p.

16

def filterNot(p: (A) => Boolean): Iterator[A]

Возвращает итератор, указывающий на элементы итератора, которые не satisfy условие p.

17

def find(p: (A) => Boolean): Option[A]

Возвращает первый элемент, satisfying условие p, или None. Замечание: если найден элемент, satisfying условие, итератор будет перемещен после этого элемента; если не найден, будет перемещен в конец.

18

def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B]

Применяет функцию f к каждому элементу последовательности итератора и возвращает итератор на результативную последовательность.

19

def forall(p: (A) => Boolean): Boolean

Возвращает логическое значение, указывающее, satisfy ли все элементы it условие p.

20

def foreach(f: (A) => Unit): Unit

Выполняет指定的 программу f на каждом элементе, возвращаемом итератором.

21

def hasDefiniteSize: Boolean

Возвращает true, если количество элементов итератора ограничено (по умолчанию эквивалентно isEmpty).

22

def indexOf(elem: B): Int

Возвращает первый элемент итератора с индексом equals x. Замечание: итератор перепрыгивает этот элемент.

23

def indexWhere(p: (A) => Boolean): Int

Возвращает элемент итератора, индекс которого satisfies условие p. Замечание: итератор перепрыгивает этот элемент.

24

def isEmpty: Boolean

Проверяет, пуст ли it, если пуст, то возвращает true,否则 false (напротив hasNext).

25

def isTraversableAgain: Boolean

Проверяет, можно ли повторно traversed этот Iterator.

26

def length: Int

Возвращает количество элементов итератора.

27

def map[B](f: (A) => B): Iterator[B]

Вводит каждый элемент it в функцию 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]

Возвращает новый итератор, в котором элементы, начиная с от element до replaced, заменены элементами итератора.

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