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

Scala迭代器(Iterator)

Scala集合

Scala Iterator (iteratore) non è una raccolta, è un metodo per accedere alla raccolta.

Le due operazioni di base dell'iteratore it sono next e hasNext.

Chiamare it.next() ritorna l'elemento successivo dell'iteratore e aggiorna lo stato dell'iteratore.

Chiamare it.hasNext() Per verificare se ci sono ancora elementi nella raccolta.

Il modo più semplice per far ritornare l'iteratore it tutti gli elementi uno per uno è utilizzare un ciclo while:

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

esegui il codice sopra riportato, il risultato sarà:

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

Trova i minimi e massimi elementi

Puoi usare it.min e it.max Metodi per trovare i minimi e massimi elementi dall'iteratore. Esempio di seguito:

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("Il massimo elemento è: " + ita.max)
      println("Il minimo elemento è: " + itb.min)
   }
}

esegui il codice sopra riportato, il risultato sarà:

$ scalac Test.scala 
$ scala Test
Il massimo elemento è: 90
Il minimo elemento è: 2

per ottenere la lunghezza dell'iteratore

Puoi usare it.size o it.length Metodi per visualizzare il numero di elementi dell'iteratore. Esempio di seguito:

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("il valore di ita.size: " + ita.size)
      println("il valore di itb.length: " + itb.length)
   }
}

esegui il codice sopra riportato, il risultato sarà:

$ scalac Test.scala 
$ scala Test
il valore di ita.size: 6
il valore di itb.length: 6

metodi comuni di Scala Iterator

la tabella seguente elenca i metodi più comuni di Scala Iterator:

numero di sequenzametodo e descrizione
1

def hasNext: Boolean

ritorna true se ci sono elementi disponibili da restituire.

2

def next(): A

ritorna l'elemento successivo dell'iteratore e aggiorna lo stato dell'iteratore

3

def ++(that: => Iterator[A]): Iterator[A]

unisci due iteratori

4

def ++[B >: A](that :=> GenTraversableOnce[B]): Iterator[B]

unisci due iteratori

5

def addString(b: StringBuilder): StringBuilder

aggiungi una stringa a StringBuilder b

6

def addString(b: StringBuilder, sep: String): StringBuilder

aggiungi una stringa a StringBuilder b, specificando il separatore

7

def buffered: BufferedIterator[A]

converti tutti gli iteratori in BufferedIterator

8

def contains(elem: Any): Boolean

controlla se l'iteratore contiene l'elemento specificato

9

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

passa i valori selezionati dell'iteratore a un array

10

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

ritorna il numero totale di elementi dell'iteratore che soddisfano la condizione p.

11

def drop(n: Int): Iterator[A]

ritorna una nuova raccolta senza i primi n elementi

12

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

Scarta gli elementi da sinistra a destra fino a quando la condizione p non è più soddisfatta.

13

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

Genera due iteratori che possono restituire rispettivamente tutti gli elementi degli iteratori.

14

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

Restituisce un valore booleano che indica se esiste un elemento nell'iteratore che soddisfa la condizione p.

15

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

Restituisce un nuovo iteratore che punta agli elementi dell'iteratore che soddisfano la condizione p.

16

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

Restituisce un iteratore che punta agli elementi dell'iteratore che non soddisfano la condizione p.

17

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

Restituisce il primo elemento che soddisfa p o None. Attenzione: se viene trovato un elemento che soddisfa la condizione, l'iteratore viene posizionato dopo quell'elemento; se non viene trovato, viene posizionato alla fine.

18

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

Applica la funzione f a ogni elemento della sequenza dell'iteratore e restituisce un iteratore che punta alla sequenza dei risultati.

19

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

Restituisce un valore booleano che indica se tutti gli elementi a cui si riferisce it soddisfano la condizione p.

20

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

Esegui il programma specificato f su ogni elemento restituito dall'iteratore.

21

def hasDefiniteSize: Boolean

Restituisce true se il numero di elementi dell'iteratore è finito (equivale a isEmpty per default).

22

def indexOf(elem: B): Int

Restituisce il primo elemento dell'iteratore con l'indice uguale a x. Attenzione: l'iteratore supera questo elemento.

23

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

Restituisce l'elemento dell'iteratore che ha l'indice soddisfacente la condizione p. Attenzione: l'iteratore supera questo elemento.

24

def isEmpty: Boolean

Controlla se it è vuoto, se lo è restituisce true, altrimenti restituisce false (contrario di hasNext).

25

def isTraversableAgain: Boolean

Verifica se questo Iterator può essere percorso ripetutamente.

26

def length: Int

Restituisce il numero di elementi dell'iteratore.

27

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

Passa ogni elemento di it al funzione f e genera un nuovo iteratore con i risultati.

28

def max: A

Restituisce l'elemento più grande degli elementi dell'iteratore.

29

def min: A

Restituisce l'elemento più piccolo degli elementi dell'iteratore.

30

def mkString: String

Converti tutti gli elementi dell'iteratore in una stringa.

31

def mkString(sep: String): String

Converti tutti gli elementi dell'iteratore in una stringa, specificando il separatore.

32

def nonEmpty: Boolean

Verifica se il contenitore contiene l'elemento (equivalente a hasNext).

33

def padTo(len: Int, elem: A): Iterator[A]

Restituisce un iteratore che contiene tutti gli elementi dell'iteratore e aggiunge copie di elem fino a raggiungere la lunghezza len.

34

def patch(from: Int, patchElems: Iterator[B], replaced: Int): Iterator[B]

Restituisce un nuovo iteratore in cui gli elementi replacements a partire dal elemento di posizione from vengono sostituiti dagli elementi dell'iteratore.

35

def product: A

Restituisce il prodotto degli elementi numerici dell'iteratore.

36

def sameElements(that: Iterator[_]): Boolean

Determina se l'iteratore e l'iteratore specificato restituiscono gli elementi in modo sequenziale.

37

def seq: Iterator[A]

Restituisce una vista seriale della collezione.

38

def size: Int

Restituisce il numero di elementi dell'iteratore.

39

def slice(from: Int, until: Int): Iterator[A]

Restituisce un nuovo iteratore che punta a un segmento della sequenza dell'iteratore, che va dall'elemento di posizione from all'elemento di posizione until.

40

def sum: A

Restituisce la somma degli elementi numerici dell'iteratore.

41

def take(n: Int): Iterator[A]

Restituisce un nuovo iteratore per i primi n elementi.

42

def toArray: Array[A]

将迭代器指向的所有元素归入数组并返回。

43

def toBuffer: Buffer[B]

将迭代器指向的所有元素拷贝至缓冲区Buffer。

44

def toIterable: Iterable[A]

返回一个包含此可遍历或迭代器所有元素的Iterable。对于无限迭代器,此操作不会终止。

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)]

返回一个新迭代器,指向分别由迭代器和指定的迭代器that元素一一对应而成的二元组序列

更多方法可以参考 API文档

Scala集合