Итератор в Scala

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", "Example", "Taobao")
     
      while (it.hasNext){
         println(it.next())
      }
   }
}

Выполнение приведенного выше кода дает следующий вывод:

$ scalac Test.scala 
$ scala Test
Baidu
Google
Example
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 не станет ложным

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 集合Коллекции в Scala

Другие расширения