
Insert title here.
Definizione di Sequence
Una Sequence in Kotlin è un’interfaccia che rappresenta una collezione di elementi che possono essere elaborati in modo pigro (lazy). A differenza delle liste, che vengono valutate immediatamente, le Sequence vengono elaborate elemento per elemento solo quando necessario. Questo le rende estremamente efficienti per operazioni su grandi set di dati o calcoli complessi.
// Generazione dei numeri primi
val primes: Sequence<Int> = sequence {
// Dichiara una sequenza di numeri interi
var numbers = generateSequence(2) { it + 1 }
while (true) {
// Crea un ciclo infinito per generare numeri primi
val prime = numbers.first()
// Preleva il primo numero della sequenza (inizialmente 2)
yield(prime)
// Emette il numero primo corrente nella sequenza risultante
numbers = numbers.drop(1).filter { it % prime != 0 }
// Rimuove il primo numero e filtra gli altri
// escludendo i multipli del numero primo corrente
}
}
// Esempio 1: Generazione dei primi 10 numeri primi
val first10Primes = primes.take(10).toList()
println(first10Primes)
// Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
// Sequenza di quadrati
val squares = generateSequence(1) { it + 1 }
.map { it * it }
.take(5)
.toList()
println(squares)
// Output: [1, 4, 9, 16, 25]
// Fibonacci con Sequence
val fibonacci = sequence {
var a = 0
var b = 1
while (true) {
yield(a)
val temp = a + b
a = b
b = temp
}
}
println(fibonacci.take(10).toList())
// Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Vantaggi delle Sequence
- Valutazione Lazy: Calcola gli elementi solo quando necessario
- Efficienza di Memoria: Non crea interi intermedi
- Performance: Ideale per operazioni su grandi collezioni
- Composabilità: Facile da combinare con altre operazioni funzionali
Dove Usare le Sequence
- Elaborazione di grandi set di dati
- Calcoli matematici complessi
- Generazione di serie infinite
- Trasformazioni di dati complesse
- Quando si vuole evitare la valutazione immediata
Le Sequence sono particolarmente utili quando si devono elaborare grandi quantità di dati senza caricarli completamente in memoria.