0Pricing
Kotlin Academy · Leçon

Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence

Construisez des pipelines en plusieurs étapes et utilisez Sequence pour une évaluation différée.

Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Le problème : les listes intermédiaires

Chaque opération sur une collection (filtrage, transformation, etc.) crée une nouvelle liste. Pour les grandes collections ou les longues chaînes, cela gaspille de la mémoire et du temps.

Évaluation immédiate contre différée

Les opérations sur les collections sont immédiates : chaque étape traite entièrement la liste avant de passer à la suivante. Les opérations sur les séquences sont différées : un élément est traité par toutes les étapes avant de passer au suivant.

Conversion en séquence

Appelez asSequence() pour passer d’un traitement immédiat (liste) à un traitement différé (séquence).
val result = (1..1_000_000)
    .asSequence()
    .filter { it % 2 == 0 }
    .map { it * it }
    .take(5)
    .toList()
println(result)  // [4, 16, 36, 64, 100]

Une séquence est différée : aucun travail avant l’opération terminale

Aucun calcul n’est effectué tant que vous n’appelez pas un opérateur terminal (toList, first, sum, etc.).
val seq = generateSequence(1) { it + 1 }  // infinite!
    .filter { it % 3 == 0 }
    .map { it * it }
val first5 = seq.take(5).toList()
println(first5)  // [9, 36, 81, 144, 225]

generateSequence : séquences infinies

generateSequence crée des séquences infinies différées.
val fibonacci = generateSequence(Pair(0, 1)) { (a, b) -> Pair(b, a + b) }
    .map { it.first }
val first10 = fibonacci.take(10).toList()
println(first10)  // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Générateur de séquences

Le générateur sequence { } avec yield crée des séquences différées personnalisées.
val evens = sequence {
    var n = 0
    while (true) {
        yield(n)
        n += 2
    }
}
println(evens.take(5).toList())  // [0, 2, 4, 6, 8]

Quand utiliser une séquence

Utilisez une séquence lorsque la collection est grande (>1000 éléments), que vous utilisez plusieurs opérations enchaînées et/ou que vous n’avez besoin que d’un petit sous-ensemble des résultats.

Quand NOT utiliser une séquence

Pour les petites collections (<100 éléments), les séquences ajoutent un surcoût. Le mécanisme fondé sur un itérateur est plus lent pour les chaînes courtes.
// Overkill for small list:
listOf(1, 2, 3).asSequence().map { it * 2 }.toList()
// Just use:
listOf(1, 2, 3).map { it * 2 }

Opérations terminales des séquences

Les opérations terminales déclenchent le traitement. Les plus courantes sont : toList(), first(), last(), count(), sum(), any(), all(), none().
val s = (1..100).asSequence().filter { it % 7 == 0 }
println(s.first())          // 7
println(s.count())          // 14
println(s.sum())            // 728

Opérations avec état contre sans état

Certaines opérations sur les séquences ont un état (sort, distinct) : elles doivent voir tous les éléments avant de produire une sortie. Elles interrompent l’évaluation différée.
val s = (1..10).asSequence()
    .filter { it > 3 }   // stateless: lazy
    .sorted()            // stateful: must see all elements
    .take(3).toList()
println(s)  // [4, 5, 6]

constrainOnce : sécurité d’une seule itération

Utilisez constrainOnce() pour qu’une séquence lève une exception si elle est parcourue plusieurs fois, ce qui est utile pour les flux.
val seq = generateSequence(1) { if (it < 5) it + 1 else null }
    .constrainOnce()
val first = seq.toList()   // OK
// val second = seq.toList()  // IllegalStateException!

Vérification rapide

Quand une séquence commence-t-elle à traiter les éléments ?

Récapitulatif

Les séquences sont différées : aucun travail n’est effectué avant une opération terminale. Utilisez asSequence() pour les grandes collections comportant plusieurs opérations enchaînées. generateSequence et le générateur { } créent des flux infinis différés. Les opérations terminales déclenchent le traitement.

Questions Fréquemment Posées

La leçon « Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence » est-elle gratuite ?

Oui — le texte complet de « Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence » ?

Construisez des pipelines en plusieurs étapes et utilisez Sequence pour une évaluation différée. Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. map et flatMap : transformer chaque élément
  2. filter, filterNot et partition
  3. fold, reduce et runningFold
  4. Enchaîner des pipelines et éviter les listes intermédiaires avec Sequence
← Retour à Kotlin Academy