Collezioni Scala - Guida rapida

Scala dispone di un ricco set di raccolte librarie. Le collezioni sono contenitori di cose. Questi contenitori possono essere sequenziati, insiemi lineari di elementi come List, Tuple, Option, Map, ecc. Le raccolte possono avere un numero arbitrario di elementi o essere limitate a zero o un elemento (ad esempio, Option).

Le collezioni possono essere strict o lazy. Le raccolte pigre hanno elementi che potrebbero non consumare memoria fino a quando non vi si accede, comeRanges. Inoltre, le raccolte possono esseremutable (il contenuto del riferimento può cambiare) o immutable(la cosa a cui si riferisce un riferimento non viene mai modificata). Tieni presente che le raccolte immutabili possono contenere elementi modificabili.

Per alcuni problemi, le raccolte modificabili funzionano meglio e per altri, le raccolte immutabili funzionano meglio. In caso di dubbio, è meglio iniziare con una raccolta immutabile e modificarla in un secondo momento se sono necessarie quelle modificabili.

Questo capitolo fa luce sui tipi di raccolta più comunemente usati e sulle operazioni utilizzate più di frequente su tali raccolte.

Suor n Collezioni con descrizione
1

Scala Lists

Scala's List [T] è una lista concatenata di tipo T.

2

Scala Sets

Un set è una raccolta di elementi diversi a coppie dello stesso tipo.

3

Scala Maps

Una mappa è una raccolta di coppie chiave / valore. Qualsiasi valore può essere recuperato in base alla sua chiave.

4

Scala Tuples

A differenza di un array o di un elenco, una tupla può contenere oggetti con tipi diversi.

5

Scala Options

L'opzione [T] fornisce un contenitore per zero o un elemento di un dato tipo.

6

Scala Iterators

Un iteratore non è una raccolta, ma piuttosto un modo per accedere agli elementi di una raccolta uno per uno.

Scala può essere installato su qualsiasi sistema UNIX o basato su Windows. Prima di iniziare l'installazione di Scala sulla tua macchina, devi avere Java 1.8 o superiore installato sul tuo computer.

Seguire i passaggi indicati di seguito per installare Scala.

Passaggio 1: verifica l'installazione di Java

Prima di tutto, devi avere Java Software Development Kit (SDK) installato sul tuo sistema. Per verificarlo, esegui uno dei seguenti due comandi a seconda della piattaforma su cui stai lavorando.

Se l'installazione di Java è stata eseguita correttamente, verranno visualizzate la versione corrente e le specifiche dell'installazione di Java. Un output di esempio è fornito nella tabella seguente.

piattaforma Comando Output di esempio
finestre

Apri la Console di comando e digita -

\>java -version

Versione Java "1.8.0_31"

Java (TM) SE Run Time

Ambiente (build 1.8.0_31-b31)

Server Java Hotspot (TM) a 64 bit

VM (build 25.31-b07, modalità mista)

Linux

Apri il terminale di comando e digita -

$java -version

Versione Java "1.8.0_31"

Aprire JDK Runtime Environment (rhel-2.8.10.4.el6_4-x86_64)

Apri la VM server JDK a 64 bit (build 25.31-b07, modalità mista)

Si presume che i lettori di questo tutorial abbiano Java SDK versione 1.8.0_31 installato sul proprio sistema.

Se non disponi di Java SDK, scarica la versione corrente da https://www.oracle.com/technetwork/java/javase/downloads/index.html e installalo.

Passaggio 2: imposta il tuo ambiente Java

Impostare la variabile di ambiente JAVA_HOME in modo che punti alla posizione della directory di base in cui Java è installato sulla macchina. Per esempio,

Suor n Piattaforma e descrizione
1

Windows

Impostare JAVA_HOME su C: \ ProgramFiles \ java \ jdk1.8.0_31

2

Linux

Esporta JAVA_HOME = / usr / local / java-current

Aggiungi il percorso completo della posizione del compilatore Java al percorso di sistema.

Suor n Piattaforma e descrizione
1

Windows

Aggiungi la stringa "C: \ Programmi \ Java \ jdk1.8.0_31 \ bin" alla fine della variabile di sistema PATH.

2

Linux

Esporta PATH = $ PATH: $ JAVA_HOME / bin /

Esegui il comando java -version dal prompt dei comandi come spiegato sopra.

Passaggio 3: installa Scala

Puoi scaricare Scala da www.scala-lang.org/downloads . Al momento della stesura di questo tutorial, ho scaricato 'scala-2.13.1-installer.jar'. Assicurati di disporre dei privilegi di amministratore per procedere. Ora, esegui il seguente comando al prompt dei comandi:

piattaforma Comando e output Descrizione
finestre

\> java -jar scala-2.13.1-installer.jar \>

Questo comando mostrerà una procedura guidata di installazione, che ti guiderà all'installazione di Scala sulla tua macchina Windows. Durante l'installazione, chiederà un contratto di licenza, semplicemente accettalo e inoltre chiederà un percorso in cui verrà installato Scala. Ho selezionato il percorso predefinito "C: \ Programmi \ Scala", puoi selezionare un percorso adatto secondo la tua convenienza.

Linux

Command -

$ java -jar scala-2.13.1-installer.jar

Output -

Benvenuti all'installazione di Scala 2.13.1!

La homepage è a - http://Scala-lang.org/

premere 1 per continuare, 2 per uscire, 3 per rivisualizzare

1 ................................................

[Avvio del disimballaggio]

[Pacchetto di elaborazione: installazione del pacchetto software (1/1)]

[Disimballaggio terminato]

[Installazione della console completata]

Durante l'installazione, chiederà il contratto di licenza, per accettarlo digita 1 e chiederà un percorso in cui verrà installato Scala. Ho inserito / usr / local / share, puoi selezionare un percorso adatto secondo la tua convenienza.

Infine, apri un nuovo prompt dei comandi e digita Scala -versione premere Invio. Dovresti vedere quanto segue:

piattaforma Comando Produzione
finestre

\> scala -version

Scala code runner versione 2.13.1 - Copyright 2002-2019, LAMP / EPFL e Lightbend, Inc.

Linux

$ scala -version

Scala code runner versione 2.13.1 - Copyright 2002-2019, LAMP / EPFL e Lightbend, Inc.tut

Scala fornisce una struttura dati, la array, che archivia una raccolta sequenziale a dimensione fissa di elementi dello stesso tipo. Un array viene utilizzato per memorizzare una raccolta di dati, ma spesso è più utile pensare a un array come una raccolta di variabili dello stesso tipo.

Invece di dichiarare variabili individuali, come numero0, numero1, ... e numero99, dichiari una variabile di matrice come numeri e utilizzi numeri [0], numeri [1] e ..., numeri [99] per rappresentare variabili individuali. Questo tutorial introduce come dichiarare variabili di array, creare array ed elaborare array utilizzando variabili indicizzate. L'indice del primo elemento di un array è il numero zero e l'indice dell'ultimo elemento è il numero totale di elementi meno uno.

Dichiarazione di variabili array

Per utilizzare un array in un programma, è necessario dichiarare una variabile per fare riferimento all'array e specificare il tipo di array a cui la variabile può fare riferimento.

La seguente è la sintassi per la dichiarazione di una variabile di matrice.

Sintassi

var z:Array[String] = new Array[String](3)

or

var z = new Array[String](3)

Qui, z è dichiarato come un array di stringhe che può contenere fino a tre elementi. I valori possono essere assegnati a singoli elementi o ottenere l'accesso a singoli elementi, può essere fatto utilizzando comandi come i seguenti:

Comando

z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"

Qui, l'ultimo esempio mostra che in generale l'indice può essere qualsiasi espressione che restituisce un numero intero. C'è un altro modo per definire un array:

var z = Array("Zara", "Nuha", "Ayan")

L'immagine seguente rappresenta un array myList. Qui,myList contiene dieci valori doppi e gli indici vanno da 0 a 9.

Elaborazione di array

Quando elaboriamo gli elementi di un array, usiamo spesso strutture di controllo del ciclo perché tutti gli elementi in un array sono dello stesso tipo e la dimensione dell'array è nota.

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare array:

Esempio

object Demo {
   def main(args: Array[String]) {
      var myList = Array(1.9, 2.9, 3.4, 3.5)
      
      // Print all the array elements
      for ( x <- myList ) {
         println( x )
      }
      // Summing all elements
      var total = 0.0;
      for ( i <- 0 to (myList.length - 1)) {
         total += myList(i);
      }
      println("Total is " + total);
      // Finding the largest element
      var max = myList(0);
      for ( i <- 1 to (myList.length - 1) ) {
         if (myList(i) > max) max = myList(i);
      }
      println("Max is " + max);
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

Scala non supporta direttamente varie operazioni sugli array e fornisce vari metodi per elaborare gli array in qualsiasi dimensione. Se si desidera utilizzare i diversi metodi, è necessario importareArray._ pacchetto.

Esistono molte situazioni in cui è necessario definire e utilizzare array multidimensionali (cioè array i cui elementi sono array). Ad esempio, matrici e tabelle sono esempi di strutture che possono essere realizzate come array bidimensionali.

Di seguito è riportato l'esempio di definizione di un array bidimensionale:

var myMatrix = ofDim[Int](3,3)

Questo è un array che ha tre elementi, ciascuno dei quali è un array di numeri interi che ha tre elementi.

Prova il seguente programma di esempio per elaborare un array multidimensionale:

Esempio

import Array._
object Demo {
   def main(args: Array[String]) {
      var myMatrix = ofDim[Int](3,3)
      // build a matrix
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            myMatrix(i)(j) = j;
         }
      }
      // Print two dimensional array
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            print(" " + myMatrix(i)(j));
         }
         println();
      }
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

0 1 2
0 1 2
0 1 2

Uso del metodo range () per generare un array contenente una sequenza di numeri interi crescenti in un dato intervallo. È possibile utilizzare l'argomento finale come passaggio per creare la sequenza; se non si utilizza l'argomento finale, si presume che step sia 1.

Facciamo un esempio di creazione di un array di intervallo (10, 20, 2): significa creare un array con elementi tra 10 e 20 e differenza di intervallo 2. Gli elementi dell'array sono 10, 12, 14, 16 e 18 .

Un altro esempio: range (10, 20). Qui la differenza di intervallo non è data, quindi per impostazione predefinita assume 1 elemento. Crea un array con gli elementi compresi tra 10 e 20 con differenza di intervallo 1. Gli elementi nell'array sono 10, 11, 12, 13, ... e 19.

Il seguente programma di esempio mostra come creare un array con intervalli.

Esempio

import Array._
object Demo {
   def main(args: Array[String]) {
      var myList1 = range(10, 20, 2)
      var myList2 = range(10,20)
      // Print all the array elements
      for ( x <- myList1 ) {
         print( " " + x )
      }
      println()
      for ( x <- myList2 ) {
         print( " " + x )
      }
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Scala fornisce una struttura dati, la ArrayBuffer, che può cambiare dimensione quando la dimensione iniziale è inferiore. Poiché l'array ha una dimensione fissa e non è possibile occupare più elementi in un array, ArrayBuffer è un'alternativa all'array in cui la dimensione è flessibile.

ArrayBuffer mantiene internamente un array della dimensione corrente per memorizzare gli elementi. Quando viene aggiunto un nuovo elemento, la dimensione viene controllata. Nel caso in cui l'array sottostante sia pieno, viene creato un nuovo array più grande e tutti gli elementi vengono copiati in un array più grande.

Dichiarazione delle variabili ArrayBuffer

La seguente è la sintassi per dichiarare una variabile ArrayBuffer.

Sintassi

var z = ArrayBuffer[String]()

Qui, z è dichiarato come un array-buffer di stringhe che inizialmente è vuoto. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

z += "Zara";
z += "Nuha";
z += "Ayan";

Elaborazione di ArrayBuffer

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare ArrayBuffer -

Esempio

import scala.collection.mutable.ArrayBuffer 
object Demo {
   def main(args: Array[String]) = {
      var myList = ArrayBuffer("Zara","Nuha","Ayan")
      println(myList);
      // Add an element
      myList += "Welcome";
      // Add two element
      myList += ("To", "Tutorialspoint");
      println(myList);
      // Remove an element
      myList -= "Welcome";
      // print second element
      println(myList(1));
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

ArrayBuffer(Zara, Nuha, Ayan)
ArrayBuffer(Zara, Nuha, Ayan, Welcome, To, Tutorialspoint)
Nuha

Gli elenchi Scala sono abbastanza simili agli array, il che significa che tutti gli elementi di un elenco hanno lo stesso tipo ma ci sono due differenze importanti. Innanzitutto, gli elenchi sono immutabili, il che significa che gli elementi di un elenco non possono essere modificati per assegnazione. In secondo luogo, gli elenchi rappresentano un elenco collegato mentre gli array sono piatti.

Il tipo di un elenco che contiene elementi di tipo T è scritto come List[T].

Prova il seguente esempio, ecco alcuni elenchi definiti per vari tipi di dati.

// List of Strings
val fruit: List[String] = List("apples", "oranges", "pears")
// List of Integers
val nums: List[Int] = List(1, 2, 3, 4)
// Empty List.
val empty: List[Nothing] = List()
// Two dimensional list
val dim: List[List[Int]] = List(
   List(1, 0, 0),
   List(0, 1, 0),
   List(0, 0, 1)
)

Tutti gli elenchi possono essere definiti utilizzando due elementi costitutivi fondamentali, una coda Nil e ::, che è pronunciato cons. Nil rappresenta anche l'elenco vuoto. Tutti gli elenchi di cui sopra possono essere definiti come segue.

// List of Strings
val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
// List of Integers
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// Empty List.
val empty = Nil
// Two dimensional list
val dim = (1 :: (0 :: (0 :: Nil))) ::
   (0 :: (1 :: (0 :: Nil))) ::
   (0 :: (0 :: (1 :: Nil))) :: Nil

Operazioni di base sugli elenchi

Tutte le operazioni sulle liste possono essere espresse nei termini delle seguenti tre modalità.

Suor n Metodi e descrizione
1

head

Questo metodo restituisce il primo elemento di una lista.

2

tail

Questo metodo restituisce un elenco composto da tutti gli elementi tranne il primo.

3

isEmpty

Questo metodo restituisce true se l'elenco è vuoto, altrimenti false.

Il seguente esempio mostra come utilizzare i metodi precedenti.

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      val nums = Nil
      println( "Head of fruit : " + fruit.head )
      println( "Tail of fruit : " + fruit.tail )
      println( "Check if fruit is empty : " + fruit.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Head of fruit : apples
Tail of fruit : List(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true

Elenchi concatenati

Puoi usare entrambi ::: operatore o List.:::() metodo o List.concat()metodo per aggiungere due o più elenchi. Si prega di trovare il seguente esempio riportato di seguito:

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit1 = "apples" :: ("oranges" :: ("pears" :: Nil))
      val fruit2 = "mangoes" :: ("banana" :: Nil)
      // use two or more lists with ::: operator
      var fruit = fruit1 ::: fruit2
      println( "fruit1 ::: fruit2 : " + fruit )
      // use two lists with Set.:::() method
      fruit = fruit1.:::(fruit2)
      println( "fruit1.:::(fruit2) : " + fruit )
      // pass two or more lists as arguments
      fruit = List.concat(fruit1, fruit2)
      println( "List.concat(fruit1, fruit2) : " + fruit  )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

fruit1 ::: fruit2 : List(apples, oranges, pears, mangoes, banana)
fruit1.:::(fruit2) : List(mangoes, banana, apples, oranges, pears)
List.concat(fruit1, fruit2) : List(apples, oranges, pears, mangoes, banana)

Creazione di elenchi uniformi

Puoi usare List.fill()Il metodo crea una lista composta da zero o più copie dello stesso elemento. Prova il seguente programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit = List.fill(3)("apples") // Repeats apples three times.
      println( "fruit : " + fruit  )
      val num = List.fill(10)(2)         // Repeats 2, 10 times.
      println( "num : " + num  )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

fruit : List(apples, apples, apples)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

Tabulare una funzione

Puoi usare una funzione insieme a List.tabulate()metodo da applicare su tutti gli elementi della lista prima di tabulare la lista. I suoi argomenti sono proprio come quelli di List.fill: il primo argomento list fornisce le dimensioni della lista da creare, e il secondo descrive gli elementi della lista. L'unica differenza è che invece di fissare gli elementi, vengono calcolati da una funzione.

Prova il seguente programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      // Creates 5 elements using the given function.
      val squares = List.tabulate(6)(n => n * n)
      println( "squares : " + squares  )
      val mul = List.tabulate( 4,5 )( _ * _ )      
      println( "mul : " + mul  )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

squares : List(0, 1, 4, 9, 16, 25)
mul : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), 
   List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

Ordine elenco inverso

Puoi usare List.reversemetodo per invertire tutti gli elementi della lista. L'esempio seguente mostra l'utilizzo.

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      println( "Before reverse fruit : " + fruit )
      println( "After reverse fruit : " + fruit.reverse )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Before reverse fruit : List(apples, oranges, pears)
After reverse fruit : List(pears, oranges, apples)

Scala fornisce una struttura dati, la ListBuffer, che è più efficiente di List durante l'aggiunta / rimozione di elementi in un elenco. Fornisce metodi per anteporre e aggiungere elementi a un elenco.

Dichiarazione delle variabili ListBuffer

Di seguito è riportata la sintassi per la dichiarazione di una variabile ListBuffer.

Sintassi

var z = ListBuffer[String]()

Qui, z è dichiarato come un buffer di lista di stringhe che inizialmente è vuoto. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

z += "Zara";
z += "Nuha";
z += "Ayan";

Elaborazione ListBuffer

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare ListBuffer -

Esempio

import scala.collection.mutable.ListBuffer 
object Demo {
   def main(args: Array[String]) = {
      var myList = ListBuffer("Zara","Nuha","Ayan")
      println(myList);
      // Add an element
      myList += "Welcome";
      // Add two element
      myList += ("To", "Tutorialspoint");
      println(myList);
      // Remove an element
      myList -= "Welcome";
      // print second element
      println(myList(1));
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

ListBuffer(Zara, Nuha, Ayan)
ListBuffer(Zara, Nuha, Ayan, Welcome, To, Tutorialspoint)
Nuha

Scala Set è una raccolta di elementi diversi a coppie dello stesso tipo. In altre parole, un Set è una raccolta che non contiene elementi duplicati. ListSet implementa set non modificabili e utilizza la struttura dell'elenco. L'ordine di inserimento degli elementi viene mantenuto durante la memorizzazione degli elementi.

Dichiarazione delle variabili ListSet

La seguente è la sintassi per dichiarare una variabile ListSet.

Sintassi

var z : ListSet[String] = ListSet("Zara","Nuha","Ayan")

Qui, z è dichiarato come un insieme di elenchi di stringhe che ha tre membri. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myList1: ListSet[String] = myList + "Naira";

Elaborazione ListSet

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare ListSet -

Esempio

import scala.collection.immutable.ListSet
object Demo {
   def main(args: Array[String]) = {
      var myList: ListSet[String] = ListSet("Zara","Nuha","Ayan");
      // Add an element
      var myList1: ListSet[String] = myList + "Naira";
      // Remove an element
      var myList2: ListSet[String] = myList - "Nuha";
      // Create empty set
      var myList3: ListSet[String] = ListSet.empty[String];
      println(myList);
      println(myList1);
      println(myList2);
      println(myList3);	  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

ListSet(Zara, Nuha, Ayan)
ListSet(Zara, Nuha, Ayan, Naira)
ListSet(Zara, Ayan)
ListSet()

Scala Vector è una struttura dati immutabile per scopi generali in cui è possibile accedere agli elementi in modo casuale. Viene generalmente utilizzato per grandi raccolte di dati.

Dichiarazione di variabili vettoriali

La seguente è la sintassi per la dichiarazione di una variabile Vector.

Sintassi

var z : Vector[String] = Vector("Zara","Nuha","Ayan")

Qui, z è dichiarato come un vettore di stringhe che ha tre membri. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var vector1: Vector[String] = z + "Naira";

Vettore di elaborazione

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare Vector -

Esempio

import scala.collection.immutable.Vector
object Demo {
   def main(args: Array[String]) = {
      var vector: Vector[String] = Vector("Zara","Nuha","Ayan");
      // Add an element
      var vector1: Vector[String] = vector :+ "Naira";
      // Reverse an element
      var vector2: Vector[String] = vector.reverse;
      // sort a vector
      var vector3: Vector[String] = vector1.sorted;
      println(vector);
      println(vector1);
      println(vector2);
      println(vector3);	  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Vector(Zara, Nuha, Ayan)
Vector(Zara, Nuha, Ayan, Naira)
Vector(Ayan, Nuha, Zara)
Vector(Ayan, Naira, Nuha, Zara)

Scala Set è una raccolta di elementi diversi a coppie dello stesso tipo. In altre parole, un Set è una raccolta che non contiene elementi duplicati. Esistono due tipi di Set, iimmutable e il mutable. La differenza tra oggetti mutabili e immutabili è che quando un oggetto è immutabile, l'oggetto stesso non può essere modificato.

Per impostazione predefinita, Scala utilizza il set immutabile. Se vuoi usare il set mutabile, dovrai importarescala.collection.mutable.Setclass esplicitamente. Se desideri utilizzare sia l'insieme mutabile che quello immutabile nella stessa raccolta, puoi continuare a fare riferimento all'insieme immutabile comeSet ma puoi fare riferimento al set mutevole come mutable.Set.

Ecco come puoi dichiarare insiemi immutabili:

Sintassi

// Empty set of integer type
var s : Set[Int] = Set()
// Set of integer type
var s : Set[Int] = Set(1,3,5,7)

or 

var s = Set(1,3,5,7)

Durante la definizione di un insieme vuoto, l'annotazione del tipo è necessaria poiché il sistema deve assegnare un tipo concreto alla variabile.

Operazioni di base sul set

Tutte le operazioni sugli insiemi possono essere espresse nei termini dei seguenti tre metodi:

Suor n Metodi e descrizione
1

head

Questo metodo restituisce il primo elemento di un set.

2

tail

Questo metodo restituisce un set composto da tutti gli elementi tranne il primo.

3

isEmpty

Questo metodo restituisce true se il set è vuoto, altrimenti false.

Prova il seguente esempio che mostra l'utilizzo dei metodi operativi di base:

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit = Set("apples", "oranges", "pears")
      val nums: Set[Int] = Set()
      println( "Head of fruit : " + fruit.head )
      println( "Tail of fruit : " + fruit.tail )
      println( "Check if fruit is empty : " + fruit.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Head of fruit : apples
Tail of fruit : Set(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true

Set concatenati

Puoi usare entrambi ++ operatore o Set.++() metodo per concatenare due o più set, ma durante l'aggiunta di set rimuoverà gli elementi duplicati.

Il seguente è l'esempio per concatenare due set.

Esempio

object Demo {
   def main(args: Array[String]) {
      val fruit1 = Set("apples", "oranges", "pears")
      val fruit2 = Set("mangoes", "banana")
      // use two or more sets with ++ as operator
      var fruit = fruit1 ++ fruit2
      println( "fruit1 ++ fruit2 : " + fruit )
      // use two sets with ++ as method
      fruit = fruit1.++(fruit2)
      println( "fruit1.++(fruit2) : " + fruit )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

fruit1 ++ fruit2 : Set(banana, apples, mangoes, pears, oranges)
fruit1.++(fruit2) : Set(banana, apples, mangoes, pears, oranges)

Trova gli elementi massimi e minimi in un set

Puoi usare Set.min metodo per scoprire il minimo e Set.maxmetodo per scoprire il massimo degli elementi disponibili in un set. Di seguito è riportato l'esempio per mostrare il programma.

Esempio

object Demo {
   def main(args: Array[String]) {
      val num = Set(5,6,9,20,30,45)
      // find min and max of the elements
      println( "Min element in Set(5,6,9,20,30,45) : " + num.min )
      println( "Max element in Set(5,6,9,20,30,45) : " + num.max )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Min element in Set(5,6,9,20,30,45) : 5
Max element in Set(5,6,9,20,30,45) : 45

Trova inserti di valori comuni

Puoi usare entrambi Set.& metodo o Set.intersectmetodo per scoprire i valori comuni tra due insiemi. Prova il seguente esempio per mostrare l'utilizzo.

Esempio

object Demo {
   def main(args: Array[String]) {
      val num1 = Set(5,6,9,20,30,45)
      val num2 = Set(50,60,9,20,35,55)
      // find common elements between two sets
      println( "num1.&(num2) : " + num1.&(num2) )
      println( "num1.intersect(num2) : " + num1.intersect(num2) )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)

Bitset è una classe base comune per set di bit modificabili e immutabili. I set di bit sono insiemi di numeri interi non negativi e sono rappresentati come array di bit di dimensione variabile racchiusi in parole a 64 bit. L'impronta di memoria di un set di bit è rappresentata dal numero più grande in esso memorizzato.

Dichiarazione di variabili BitSet

La seguente è la sintassi per dichiarare una variabile BitSet.

Sintassi

var z : BitSet = BitSet(0,1,2)

Qui, z è dichiarato come un insieme di bit di interi non negativi che ha tre membri. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myList1: BitSet = myList + 3;

Elaborazione di BitSet

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare BitSet -

Esempio

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2);
      // Add an element
      var mySet1: BitSet = mySet + 3;
      // Remove an element
      var mySet2: BitSet = mySet - 2;
      var mySet3: BitSet = BitSet(4, 5);
      // Adding sets
      var mySet4: BitSet = mySet1 ++ mySet3;
      println(mySet);
      println(mySet1);
      println(mySet2);
      println(mySet4);	  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

BitSet(0, 1, 2)
BitSet(0, 1, 2, 3)
BitSet(0, 1)
BitSet(0, 1, 2, 3, 4, 5)

Scala Set è una raccolta di elementi diversi a coppie dello stesso tipo. In altre parole, un Set è una raccolta che non contiene elementi duplicati. HashSet implementa set non modificabili e utilizza una tabella hash. L'ordine di inserimento degli elementi non viene mantenuto.

Dichiarazione delle variabili HashSet

La seguente è la sintassi per dichiarare una variabile HashSet.

Sintassi

var z : HashSet[String] = HashSet("Zara","Nuha","Ayan")

Qui, z è dichiarato come un insieme di hash di stringhe che ha tre membri. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myList1: HashSet[String] = myList + "Naira";

Elaborazione di HashSet

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare HashSet -

Esempio

import scala.collection.immutable.HashSet
object Demo {
   def main(args: Array[String]) = {
      var mySet: HashSet[String] = HashSet("Zara","Nuha","Ayan");
      // Add an element
      var mySet1: HashSet[String] = mySet + "Naira";
      // Remove an element
      var mySet2: HashSet[String] = mySet - "Nuha";
      // Create empty set
      var mySet3: HashSet[String] = HashSet.empty[String];
      println(mySet);
      println(mySet1);
      println(mySet2);
      println(mySet3);	  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

HashSet(Zara, Nuha, Ayan)
HashSet(Zara, Nuha, Ayan, Naira)
HashSet(Zara, Ayan)
HashSet()

Scala Set è una raccolta di elementi diversi a coppie dello stesso tipo. In altre parole, un Set è una raccolta che non contiene elementi duplicati. TreeSet implementa set non modificabili e mantiene gli elementi in ordine ordinato.

Dichiarazione delle variabili TreeSet

Di seguito è riportata la sintassi per la dichiarazione di una variabile TreeSet.

Sintassi

var z : TreeSet[String] = TreeSet("Zara","Nuha","Ayan")

Qui, z è dichiarato come un insieme di stringhe ad albero che ha tre membri. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myList1: TreeSet[String] = myList + "Naira";

Elaborazione TreeSet

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare TreeSet -

Esempio

import scala.collection.immutable.TreeSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: TreeSet[String] = TreeSet("Zara","Nuha","Ayan");
      // Add an element
      var mySet1: TreeSet[String] = mySet + "Naira";
      // Remove an element
      var mySet2: TreeSet[String] = mySet - "Nuha";
      // Create empty set
      var mySet3: TreeSet[String] = TreeSet.empty[String];
      println(mySet);
      println(mySet1);
      println(mySet2);
      println(mySet3);	  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

TreeSet(Ayan, Nuha, Zara)
TreeSet(Ayan, Naira, Nuha, Zara)
TreeSet(Ayan, Zara)
TreeSet()

Scala map è una raccolta di coppie chiave / valore. Qualsiasi valore può essere recuperato in base alla sua chiave. Le chiavi sono uniche nella mappa, ma i valori non devono essere univoci. Le mappe sono anche chiamate tabelle hash. Esistono due tipi di mappe, leimmutable e il mutable. La differenza tra oggetti mutabili e immutabili è che quando un oggetto è immutabile, l'oggetto stesso non può essere modificato.

Per impostazione predefinita, Scala utilizza la mappa immutabile. Se vuoi usare la mappa mutevole, dovrai importarescala.collection.mutable.Mapclass esplicitamente. Se desideri utilizzare mappe modificabili e immutabili nella stessa, puoi continuare a fare riferimento alla mappa immutabile comeMap ma puoi fare riferimento al set mutabile come mutable.Map.

Di seguito sono riportate le istruzioni di esempio per dichiarare Maps immutabile -

// Empty hash table whose keys are strings and values are integers:
var A:Map[Char,Int] = Map()

// A map with keys and values.
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

Durante la definizione della mappa vuota, l'annotazione del tipo è necessaria poiché il sistema deve assegnare un tipo concreto alla variabile. Se vogliamo aggiungere una coppia chiave-valore a una mappa, possiamo utilizzare l'operatore + come segue.

A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)

Operazioni di base su MAP

Tutte le operazioni sulle mappe possono essere espresse nei termini dei seguenti tre metodi.

Suor n Metodi e descrizione
1

keys

Questo metodo restituisce un iterabile contenente ogni chiave nella mappa.

2

values

Questo metodo restituisce un iterabile contenente ogni valore nella mappa.

3

isEmpty

Questo metodo restituisce true se la mappa è vuota, altrimenti false.

Prova il seguente programma di esempio che mostra l'utilizzo dei metodi Map.

Esempio

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val nums: Map[Int, Int] = Map()
      println( "Keys in colors : " + colors.keys )
      println( "Values in colors : " + colors.values )
      println( "Check if colors is empty : " + colors.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Keys in colors : Set(red, azure, peru)
Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F)
Check if colors is empty : false
Check if nums is empty : true

Mappe concatenate

Puoi usare entrambi ++ operatore o Map.++() metodo per concatenare due o più mappe, ma durante l'aggiunta di mappe rimuoverà le chiavi duplicate.

Prova il seguente programma di esempio per concatenare due mappe.

Esempio

object Demo {
   def main(args: Array[String]) {
      val colors1 = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val colors2 = Map(
         "blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000"
      )
      // use two or more Maps with ++ as operator
      var colors = colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )
      // use two maps with ++ as method
      colors = colors1.++(colors2)
      println( "colors1.++(colors2)) : " + colors )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

Stampa chiavi e valori da una mappa

Puoi scorrere le chiavi e i valori di una mappa utilizzando il ciclo "foreach". Qui abbiamo usato il metodoforeachassociato all'iteratore per scorrere le chiavi. Di seguito è riportato il programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")

      colors.keys.foreach{
         i =>  
         print( "Key = " + i )
         println(" Value = " + colors(i) )
      }
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F

Verificare la presenza di una chiave in Map

Puoi usare entrambi Map.containsmetodo per verificare se una determinata chiave esiste o meno nella mappa. Prova il seguente programma di esempio per il controllo delle chiavi.

Esempio

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      if( colors.contains( "red" )) {
         println("Red key exists with value :"  + colors("red"))
      } else {
         println("Red key does not exist")
      }
      if( colors.contains( "maroon" )) {
         println("Maroon key exists with value :"  + colors("maroon"))
      } else {
         println("Maroon key does not exist")
      }
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Red key exists with value :#FF0000
Maroon key does not exist

Scala map è una raccolta di coppie chiave / valore. Qualsiasi valore può essere recuperato in base alla sua chiave. Le chiavi sono uniche nella mappa, ma i valori non devono essere univoci. HashMap implementa la mappa immutabile e utilizza la tabella hash per implementare la stessa.

Dichiarazione delle variabili HashMap

La seguente è la sintassi per dichiarare una variabile HashMap.

Sintassi

val colors = HashMap("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")

Qui, i colori sono dichiarati come una mappa hash di Strings, Int che ha tre coppie chiave-valore. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myMap1: HashMap[Char, Int] = colors + ("black" -> "#000000");

Elaborazione di HashMap

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare HashMap -

Esempio

import scala.collection.immutable.HashMap
object Demo {
   def main(args: Array[String]) = {
      var myMap: HashMap[String,String] = HashMap(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      );
      // Add an element
      var myMap1: HashMap[String,String] = myMap + ("white" -> "#FFFFFF");
      // Print key values
      myMap.keys.foreach{ 
         i =>  
         print( "Key = " + i )
         println(" Value = " + myMap(i) )
      }
      if( myMap.contains( "red" )) {
         println("Red key exists with value :"  + myMap("red"))
      } else {
         println("Red key does not exist")
      }
      if( myMap.contains( "maroon" )) {
         println("Maroon key exists with value :"  + myMap("maroon"))
      } else {
         println("Maroon key does not exist")
      }
      //removing element
      var myMap2: HashMap[String,String] = myMap - ("white");
      // Create empty map
      var myMap3: HashMap[String,String] = HashMap.empty[String, String];
      println(myMap1);
      println(myMap2);
      println(myMap3);		  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Key = red Value = #FF0000
Red key exists with value :#FF0000
Maroon key does not exist
HashMap(azure -> #F0FFFF, peru -> #CD853F, white -> #FFFFFF, red -> #FF0000)
HashMap(azure -> #F0FFFF, peru -> #CD853F, red -> #FF0000)
HashMap()

Scala map è una raccolta di coppie chiave / valore. Qualsiasi valore può essere recuperato in base alla sua chiave. Le chiavi sono uniche nella mappa, ma i valori non devono essere univoci. ListMap implementa la mappa immutabile e utilizza list per implementarla. Viene utilizzato con un numero ridotto di elementi.

Dichiarazione delle variabili ListMap

La seguente è la sintassi per la dichiarazione di una variabile ListMap.

Sintassi

val colors = ListMap("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")

Qui, i colori sono dichiarati come una mappa hash di Strings, Int che ha tre coppie chiave-valore. I valori possono essere aggiunti utilizzando comandi come i seguenti:

Comando

var myMap1: ListMap[Char, Int] = colors + ("black" -> "#000000");

Elaborazione ListMap

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare ListMap -

Esempio

import scala.collection.immutable.ListMap

object Demo {
   def main(args: Array[String]) = {
      var myMap: ListMap[String,String] = ListMap(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      );
      // Add an element
      var myMap1: ListMap[String,String] = myMap + ("white" -> "#FFFFFF");
      // Print key values
      myMap.keys.foreach{ 
         i =>  
         print( "Key = " + i )
         println(" Value = " + myMap(i) ) 
      }
      if( myMap.contains( "red" )) {
         println("Red key exists with value :"  + myMap("red"))
      } else {
         println("Red key does not exist")
      }
      if( myMap.contains( "maroon" )) {
         println("Maroon key exists with value :"  + myMap("maroon"))
      } else {
         println("Maroon key does not exist")
      }
      //removing element
      var myMap2: ListMap[String,String] = myMap - ("white");
      // Create empty map
      var myMap3: ListMap[String,String] = ListMap.empty[String, String];
      println(myMap1);
      println(myMap2);	
      println(myMap3);		  
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Red key exists with value :#FF0000
Maroon key does not exist
ListMap(red -> #FF0000, azure -> #F0FFFF, peru -> #CD853F, white -> #FFFFFF)
ListMap(red -> #FF0000, azure -> #F0FFFF, peru -> #CD853F)
ListMap()

Un iteratore non è una raccolta, ma piuttosto un modo per accedere agli elementi di una raccolta uno per uno. Le due operazioni di base su un fileiterator it siamo next e hasNext. Una chiamata ait.next()restituirà l'elemento successivo dell'iteratore e farà avanzare lo stato dell'iteratore. Puoi scoprire se ci sono più elementi da restituire usando Iteratorit.hasNext metodo.

Il modo più semplice per "scorrere" tutti gli elementi restituiti da un iteratore è usare un ciclo while. Seguiamo il seguente programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      val it = Iterator("a", "number", "of", "words")
      while (it.hasNext){
         println(it.next())
      }
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

a
number
of
words

Trova elemento con valore minimo e massimo

Puoi usare it.min e it.maxmetodi per scoprire gli elementi con valore minimo e massimo da un iteratore. Qui, abbiamo usatoita e itbper eseguire due diverse operazioni perché l'iteratore può essere attraversato una sola volta. Di seguito è riportato il programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      val ita = Iterator(20,40,2,50,69, 90)
      val itb = Iterator(20,40,2,50,69, 90)
      println("Maximum valued element " + ita.max )
      println("Minimum valued element " + itb.min )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Maximum valued element 90
Minimum valued element 2

Trova la lunghezza dell'iteratore

Puoi usare entrambi it.size o it.lengthmetodi per scoprire il numero di elementi disponibili in un iteratore. Qui, abbiamo usato ita e itb per eseguire due diverse operazioni perché l'iteratore può essere attraversato una sola volta. Di seguito è riportato il programma di esempio.

Esempio

object Demo {
   def main(args: Array[String]) {
      val ita = Iterator(20,40,2,50,69, 90)
      val itb = Iterator(20,40,2,50,69, 90)
      println("Value of ita.size : " + ita.size )
      println("Value of itb.length : " + itb.length )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Value of ita.size : 6
Value of itb.length : 6

L'opzione Scala [T] è un contenitore per zero o un elemento di un dato tipo. Un'opzione [T] può essere una delle dueSome[T] o Noneoggetto, che rappresenta un valore mancante. Ad esempio, il metodo get di Scala's Map produce Some (value) se è stato trovato un valore corrispondente a una data chiave, oNone se la chiave data non è definita nella mappa.

Il tipo di opzione è usato frequentemente nei programmi Scala e puoi confrontarlo con il nullvalore disponibile in Java che non indica alcun valore. Ad esempio, il metodo get di java.util.HashMap restituisce un valore memorizzato in HashMap o null se non è stato trovato alcun valore.

Supponiamo di avere un metodo che recupera un record dal database in base a una chiave primaria.

def findPerson(key: Int): Option[Person]

Il metodo restituirà Some [Person] se il record viene trovato ma None se il record non viene trovato. Seguiamo il seguente programma.

Esempio

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("capitals.get( \"France\" ) : " +  capitals.get( "France" ))
      println("capitals.get( \"India\" ) : " +  capitals.get( "India" ))
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

Il modo più comune per separare i valori facoltativi è attraverso una corrispondenza di pattern. Ad esempio, prova il seguente programma.

Esempio

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
      println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
   }
   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

Utilizzo del metodo getOrElse ()

Di seguito è riportato il programma di esempio per mostrare come utilizzare il metodo getOrElse () per accedere a un valore o un valore predefinito quando non è presente alcun valore.

Esempio

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.getOrElse(0): " + a.getOrElse(0) )
      println("b.getOrElse(10): " + b.getOrElse(10) )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

a.getOrElse(0): 5
b.getOrElse(10): 10

Utilizzo del metodo isEmpty ()

Di seguito è riportato il programma di esempio per mostrare come utilizzare il metodo isEmpty () per verificare se l'opzione è Nessuno o meno.

Esempio

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Esempio

a.isEmpty: false
b.isEmpty: true

Queue è First In First Out, struttura dati FIFO e permette di inserire e recuperare elementi in maniera FIFO.

Dichiarazione delle variabili di coda

La seguente è la sintassi per la dichiarazione di una variabile Queue.

Sintassi

val queue = Queue(1, 2, 3, 4, 5)

Qui, la coda è dichiarata come una coda di numeri. Il valore può essere aggiunto in primo piano utilizzando comandi come i seguenti:

Comando

queue.enqueue(6)

Il valore può essere recuperato in primo piano utilizzando comandi come i seguenti:

Comando

queue.dequeue()

Coda di elaborazione

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare la coda:

Esempio

import scala.collection.mutable.Queue
object Demo {
   def main(args: Array[String]) = {
      var queue = Queue(1, 2, 3, 4, 5);
      // Print queue elements
      queue.foreach{(element:Int) => print(element + " ")}
      println();
      // Print first element
      println("First Element: " + queue.front)
      // Add an element
      queue.enqueue(6);
      // Print queue elements
      queue.foreach{(element:Int) => print(element+ " ")}
      println();
      // Remove an element
      var dq = queue.dequeue;
      // Print dequeued element
      println("Dequeued Element: " + dq)
      // Print queue elements
      queue.foreach{(element:Int) => print(element+ " ")}
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

1 2 3 4 5
First Element: 1
1 2 3 4 5 6
Dequeued Element: 1
2 3 4 5 6

La tupla Scala combina un numero fisso di elementi insieme in modo che possano essere trasferiti nel loro insieme. A differenza di un array o di un elenco, una tupla può contenere oggetti con tipi diversi ma sono anche immutabili.

Il seguente è un esempio di una tupla che contiene un numero intero, una stringa e la console.

val t = (1, "hello", Console)

Che è zucchero sintattico (scorciatoia) per quanto segue -

val t = new Tuple3(1, "hello", Console)

Il tipo effettivo di una tupla dipende dal numero e dagli elementi che contiene e dai tipi di tali elementi. Pertanto, il tipo di (99, "Luftballons") è Tuple2 [Int, String]. Il tipo di ('u', 'r', "the", 1, 4, "me") è Tuple6 [Char, Char, String, Int, Int, String]

Le tuple sono di tipo Tuple1, Tuple2, Tuple3 e così via. Attualmente c'è un limite massimo di 22 in Scala se ne hai bisogno di più, puoi usare una raccolta, non una tupla. Per ogni tipo di TupleN, dove 1 <= N <= 22, Scala definisce un numero di metodi di accesso agli elementi. Data la seguente definizione:

val t = (4,3,2,1)

Per accedere agli elementi di una tupla t, è possibile utilizzare il metodo t._1 per accedere al primo elemento, t._2 per accedere al secondo e così via. Ad esempio, la seguente espressione calcola la somma di tutti gli elementi di t.

val sum = t._1 + t._2 + t._3 + t._4

È possibile utilizzare Tuple per scrivere un metodo che accetta List [Double] e restituisce il conteggio, la somma e la somma dei quadrati restituiti in una Tuple a tre elementi, una Tuple3 [Int, Double, Double]. Sono anche utili per passare un elenco di valori di dati come messaggi tra attori nella programmazione concorrente.

Prova il seguente programma di esempio. Mostra come usare una tupla.

Esempio

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      val sum = t._1 + t._2 + t._3 + t._4
      println( "Sum of elements: "  + sum )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comandi

\>scalac Demo.scala
\>scala Demo

Produzione

Sum of elements: 10

Ripeti la tupla

Puoi usare Tuple.productIterator() metodo per iterare su tutti gli elementi di una tupla.

Prova il seguente programma di esempio per iterare su tuple.

Esempio

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      t.productIterator.foreach{ i =>println("Value = " + i )}
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comandi

\>scalac Demo.scala
\>scala Demo

Produzione

Value = 4
Value = 3
Value = 2
Value = 1

Conversione in stringa

Puoi usare Tuple.toString()metodo per concatenare tutti gli elementi della tupla in una stringa. Prova il seguente programma di esempio per convertire in String.

Esempio

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple3(1, "hello", Console)
      println("Concatenated String: " + t.toString() )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Concatenated String: (1,hello,scala.Console$@281acd47)

Scambia gli elementi

Puoi usare Tuple.swap metodo per scambiare gli elementi di un Tuple2.

Prova il seguente programma di esempio per scambiare gli elementi.

Esempio

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple2("Scala", "hello")
      println("Swapped Tuple: " + t.swap )
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Swapped tuple: (hello,Scala)

Scala Seq è un tratto per rappresentare sequenze immutabili. Questa struttura fornisce l'accesso basato sull'indice e vari metodi di utilità per trovare gli elementi, le loro occorrenze e le sottosequenze. Un Seq mantiene l'ordine di inserimento.

Dichiarazione delle variabili Seq

La seguente è la sintassi per la dichiarazione di una variabile Seq.

Sintassi

val seq: Seq[Int] = Seq(1, 2, 3, 4, 5)

Qui, seq è dichiarato come seq di numeri. Seq fornisce comandi come i seguenti:

Comando

val isPresent = seq.contains(4);
val contains = seq.endsWith(Seq(4,5));
var lastIndexOf = seq.lasIndexOf(5);

Elaborazione Seq

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare Seq -

Esempio

import scala.collection.immutable.Seq
object Demo {
   def main(args: Array[String]) = {
      var seq = Seq(1, 2, 3, 4, 5, 3)
      // Print seq elements
      seq.foreach{(element:Int) => print(element + " ")}
      println()
      println("Seq ends with (5,3): " + seq.endsWith(Seq(5, 3)))
      println("Seq contains 4: " + seq.contains(4))
      println("Last index of 3: " + seq.lastIndexOf(3))
      println("Reversed Seq" + seq.reverse)           
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

1 2 3 4 5 3
Seq ends with (5,3): true
Seq contains 4: true
Last index of 3: 5
Reversed SeqList(3, 5, 4, 3, 2, 1)

Stack è Last In First Out, struttura dati LIFO e permette di inserire e recuperare elementi in alto, in maniera LIFO.

Dichiarazione delle variabili di stack

La seguente è la sintassi per dichiarare una variabile Stack.

Sintassi

val stack = Stack(1, 2, 3, 4, 5)

Qui, la pila è dichiarata come una pila di numeri. Il valore può essere aggiunto in alto utilizzando comandi come i seguenti:

Comando

stack.push(6)

Il valore può essere recuperato dall'alto utilizzando comandi come i seguenti:

Comando

stack.top

Il valore può essere rimosso dall'alto utilizzando comandi come i seguenti:

Comando

stack.pop

Stack di elaborazione

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare Stack -

Esempio

import scala.collection.mutable.Stack
object Demo {
   def main(args: Array[String]) = {
      var stack: Stack[Int] = Stack();
      // Add elements
      stack.push(1);
      stack.push(2);
      // Print element at top
      println("Top Element: " + stack.top)
      // Print element
      println("Removed Element: " + stack.pop())
      // Print element
      println("Top Element: " + stack.top)	
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Top Element: 2
Removed Element: 2
Top Element: 1

Scala Stream è un elenco speciale con funzionalità di valutazione pigra. In scala stream, gli elementi vengono valutati solo quando sono necessari. Stream supporta calcoli pigri ed è esperto di prestazioni.

Dichiarazione delle variabili di flusso

La seguente è la sintassi per dichiarare una variabile Stream.

Sintassi

val stream = 1 #:: 2 #:: 3 #:: Stream.empty

Qui, stream è dichiarato come flusso di numeri. Qui 1 è l'inizio del flusso, 2, 3 sono la coda del flusso. Stream.empty segna la fine del flusso. I valori possono essere recuperati utilizzando comandi take come i seguenti:

Comando

stream.take(2)

Flusso di elaborazione

Di seguito è riportato un programma di esempio che mostra come creare, inizializzare ed elaborare Stream -

Esempio

import scala.collection.immutable.Stream
object Demo {
   def main(args: Array[String]) = {
      val stream = 1 #:: 2 #:: 3 #:: Stream.empty
      // print stream
      println(stream)
      // Print first two elements	
      stream.take(2).print
      println()
      // Create an empty stream
      val stream1: Stream[Int] = Stream.empty[Int]
      // Print element
      println(s"Stream: $stream1")
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Stream(1, <not computed>)
1, 2
Stream: Stream()

Il metodo drop () è il metodo utilizzato da List per selezionare tutti gli elementi tranne i primi n elementi della lista.

Sintassi

La seguente è la sintassi del metodo drop.

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

In questo caso n è il numero di elementi da eliminare dall'elenco. Questo metodo restituisce tutti gli elementi della lista tranne i primi n.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di rilascio:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3, 4, 5)
      // print list
      println(list)
      //apply operation
      val result = list.drop(3)
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(1, 2, 3, 4, 5)
List(4, 5)

Il metodo dropWhile () è il metodo utilizzato da List per eliminare tutti gli elementi che soddisfano una determinata condizione.

Sintassi

La seguente è la sintassi del metodo dropWhile.

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

Qui, p: (A) => Boolean è un predicato o una condizione da applicare a ogni elemento della lista. Questo metodo restituisce tutti gli elementi della lista tranne quelli rilasciati.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo dropWhile:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(3, 6, 9, 4, 2)
      // print list
      println(list)
      //apply operation
      val result = list.dropWhile(x=>{x % 3 == 0})
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(3, 6, 9, 4, 2)
List(4, 2)

Il metodo filter () è il metodo utilizzato da List per selezionare tutti gli elementi che soddisfano un dato predicato.

Sintassi

La seguente è la sintassi del metodo di filtro.

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

Qui, p: (A) => Boolean è un predicato o una condizione da applicare a ogni elemento della lista. Questo metodo restituisce tutti gli elementi della lista che soddisfano la condizione data.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di filtro:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(3, 6, 9, 4, 2)
      // print list
      println(list)
      //apply operation
      val result = list.filter(x=>{x % 3 == 0})
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(3, 6, 9, 4, 2)
List(3, 6, 9)

Il metodo find () è il metodo utilizzato dagli iteratori per trovare un elemento che soddisfa un dato predicato.

Sintassi

La seguente è la sintassi del metodo find.

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

Qui, p: (A) => Boolean è un predicato o una condizione da applicare su ogni elemento dell'iteratore. Questo metodo restituisce l'elemento Option contenente l'elemento corrispondente dell'iteratore che soddisfa la condizione data.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di ricerca:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val iterator = Iterator(3, 6, 9, 4, 2)
      //apply operation
      val result = iterator.find(x=>{x % 3 == 0})
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Some(3)

Il metodo flatMap () è il metodo del tratto TraversableLike, prende un predicato, lo applica a ogni elemento della raccolta e restituisce una nuova raccolta di elementi restituiti dal predicato.

Sintassi

Quanto segue è la sintassi del metodo flatMap.

def flatMap[B](f: (A) ? GenTraversableOnce[B]): TraversableOnce[B]

Qui, f: (A)? GenTraversableOnce [B] è un predicato o una condizione da applicare a ogni elemento della raccolta. Questo metodo restituisce l'elemento Option contenente l'elemento corrispondente dell'iteratore che soddisfa la condizione data.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo flatMap:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 5, 10)
      //apply operation
      val result = list.flatMap{x => List(x,x+1)}
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(1, 2, 5, 6, 10, 11)

Il metodo flatten () è un tratto GenericTraversableTemplate del membro, restituisce una singola raccolta di elementi unendo raccolte figlie.

Sintassi

La seguente è la sintassi del metodo flatten.

def flatten[B]: Traversable[B]

Qui, f: (A)? GenTraversableOnce [B] è un predicato o una condizione da applicare a ogni elemento della raccolta. Questo metodo restituisce l'elemento Option contenente l'elemento corrispondente dell'iteratore che soddisfa la condizione data.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo flatten:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(List(1,2), List(3,4))
      //apply operation
      val result = list.flatten
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(1, 2, 3, 4)

Il metodo fold () è un membro del tratto TraversableOnce, viene utilizzato per comprimere gli elementi delle raccolte.

Sintassi

La seguente è la sintassi del metodo fold.

def fold[A1 >: A](z: A1)(op: (A1, A1) ? A1): A1

Qui, il metodo fold accetta come parametro la funzione di operatore binario associativo. Questo metodo restituisce il risultato come valore. Considera il primo input come valore iniziale e il secondo input come una funzione (che prende come input il valore accumulato e l'elemento corrente).

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di piegatura:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to get sum of all elements of the list
      val result = list.fold(0)(_ + _)
      //print result
      println(result)      
   }
}

Qui abbiamo passato 0 come valore iniziale alla funzione fold e quindi vengono aggiunti tutti i valori. Salva il programma sopra in formatoDemo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

10

Il metodo foldLeft () è un membro del tratto TraversableOnce, viene utilizzato per comprimere gli elementi delle raccolte. Naviga gli elementi da sinistra a destra. Viene utilizzato principalmente nelle funzioni ricorsive e previene le eccezioni di overflow dello stack.

Sintassi

La seguente è la sintassi del metodo fold.

def foldLeft[B](z: B)(op: (B, A) ? B): B

Qui, il metodo foldLeft accetta la funzione di operatore binario associativo come parametro. Questo metodo restituisce il risultato come valore.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo foldLeft:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to get sum of all elements of the list
      val result = list.foldLeft(0)(_ + _)
      //print result
      println(result)      
   }
}

Qui abbiamo passato 0 come valore iniziale alla funzione fold e quindi vengono aggiunti tutti i valori. Salva il programma sopra in formatoDemo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

10

Il metodo foldRight () è un membro del tratto TraversableOnce, viene utilizzato per comprimere gli elementi delle raccolte. Naviga tra gli elementi da destra a sinistra.

Sintassi

La seguente è la sintassi del metodo foldRight.

def foldRight[B](z: B)(op: (B, A) ? B): B

Qui, il metodo fold accetta come parametro la funzione di operatore binario associativo. Questo metodo restituisce il valore risultante.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo foldRight:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to get sum of all elements of the list
      val result = list.foldRight(0)(_ + _)
      //print result
      println(result)      
   }
}

Qui abbiamo passato 0 come valore iniziale alla funzione foldRight e quindi tutti i valori vengono aggiunti. Salva il programma sopra in formatoDemo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

10

Il metodo map () è un membro del tratto TraversableLike, viene utilizzato per eseguire un metodo predicato su ogni elemento di una raccolta. Restituisce una nuova collezione.

Sintassi

Quanto segue è la sintassi del metodo map.

def map[B](f: (A) ? B): Traversable[B]

Qui, il metodo map accetta una funzione prediate come parametro. Questo metodo restituisce la raccolta aggiornata.

Utilizzo

Di seguito è riportato un programma di esempio per mostrare come utilizzare il metodo mappa:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to get twice of each element.
      val result = list.map(_ * 2)
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(2, 4, 6, 8)

Il metodo partition () è un membro del tratto TraversableLike, viene utilizzato per eseguire un metodo predicato su ogni elemento di una raccolta. Restituisce due raccolte, una raccolta è di elementi che soddisfa una data funzione del predicato e un'altra raccolta è di elementi che non soddisfano la data funzione del predicato.

Sintassi

Quanto segue è la sintassi del metodo map.

def partition(p: (A) ? Boolean): (Repr, Repr)

In questo caso, il metodo di partizione accetta una funzione prediale come parametro. Questo metodo restituisce le raccolte.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di partizione:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3, 4, 5, 6, 7)
      //apply operation to get twice of each element.
      val (result1, result2) = list.partition(x=>{x % 3 == 0})
      //print result
      println(result1)
      println(result2)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(3, 6)
List(1, 2, 4, 5, 7)

Il metodo reduce () è un membro del tratto TraversableOnce, viene utilizzato per comprimere gli elementi delle raccolte. È simile al metodo fold ma non assume il valore iniziale.

Sintassi

La seguente è la sintassi del metodo di riduzione.

def reduce[A1 >: A](op: (A1, A1) ? A1): A1

Qui, il metodo reduce prende come parametro la funzione di operatore binario associativo. Questo metodo restituisce il valore risultante.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di piegatura:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to get sum of all elements of the list
      val result = list.reduce(_ + _)
      //print result
      println(result)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

10

Il metodo scan () è un membro del tratto TraversableLike, è simile al metodo fold ma viene utilizzato per applicare un'operazione su ogni elemento della raccolta e restituire una raccolta.

Sintassi

La seguente è la sintassi del metodo fold.

def scan[B >: A, That](z: B)(op: (B, B) ? B)(implicit cbf: CanBuildFrom[Repr, B, That]): That

In questo caso, il metodo di scansione accetta come parametro la funzione operatore binario associativo. Questo metodo restituisce la raccolta aggiornata come risultato. Considera il primo input come valore iniziale e il secondo input come una funzione.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo di scansione:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      //apply operation to create a running total of all elements of the list
      val list1 = list.scan(0)(_ + _)
      //print list
      println(list1)      
   }
}

Qui abbiamo passato 0 come valore iniziale per la funzione di scansione e quindi vengono aggiunti tutti i valori. Salva il programma sopra in formatoDemo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List(0, 1, 3, 6, 10)

Il metodo zip () è un membro del tratto IterableLike, viene utilizzato per unire una raccolta alla raccolta corrente e il risultato è una raccolta di una coppia di elementi della tupla da entrambe le raccolte.

Sintassi

La seguente è la sintassi del metodo zip.

def zip[B](that: GenIterable[B]): Iterable[(A, B)]

Qui, il metodo zip accetta una raccolta come parametro. Questo metodo restituisce la raccolta aggiornata della coppia come risultato.

Utilizzo

Di seguito è riportato un programma di esempio che mostra come utilizzare il metodo zip:

Esempio

object Demo {
   def main(args: Array[String]) = {
      val list = List(1, 2, 3 ,4)
      val list1 = List("A", "B", "C", "D")
      //apply operation to create a zip of list
      val list2 = list zip list1
      //print list
      println(list2)      
   }
}

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

List((1,A), (2,B), (3,C), (4,D))