Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Les séquences

Qu’est-ce qu’une séquence ?

Une séquence permet, à l’instar d’une collection, de modéliser des listes afin de stocker des éléments. Une séquence en Kotlin, est représentée par l’interface Sequence.

Pour déclarer une séquence en lecture seule, il convient d’utiliser la fonction sequenceOf. Il est nécessaire de renseigner, en tant qu’arguments, les éléments qui composent la séquence au moment de son initialisation.

Comme les collections, les séquences peuvent contenir aussi bien des objets que des types primitifs.

Exemples

val sequenceOfInts = sequenceOf(15, 1024, 1, -8) 
val sequenceOfStrings = sequenceOf("a string", "another string", "Heyden") 
val sequenceOfDogs = sequenceOf(Dog("Doggo"), Dog("Heyden")) 
val sequenceOfLongs = sequenceOf(-1L, 1478L, 1L, 0L) 
val sequenceOfDouble = sequenceOf(1.8, 0.0, -17.6896) 

Nous ne reviendrons pas sur la manipulation des séquences car toutes les opérations applicables aux collections le sont aussi aux séquences, que ce soit le parcours, les opérations de sélection, de tri, etc.

Pourquoi utiliser les séquences ?

Comparativement aux collections, les séquences peuvent se révéler plus optimisées lorsque l’on a besoin d’appliquer plusieurs opérations aux éléments qu’elles contiennent. En effet, c’est dans ce cas précis que les séquences et les collections ont un fonctionnement très différent.

Pour illustrer cette différence de fonctionnement, reprenons un exemple proposé par Florina Muntenescu, Android Developer Advocate chez Google. Dans cet exemple, posté sur Twitter le 25 juin 2019, cette développeuse met en évidence la différence de traitement entre une séquence et une collection contenant des formes colorées et auxquelles on applique plusieurs opérations.

La première opération consiste à créer une copie de toutes les formes, à changer leurs couleurs avec du jaune grâce à l’opérateur map et à ne conserver que la première forme carrée à l’aide de l’opérateur first.

Pour mettre en place un tel exemple, commençons par créer une classe de données Shape composée de deux attributs : un attribut color de type Color qui est une énumération et un attribut type de type ShapeType qui est aussi une énumération.

Voici ce que donne la modélisation Kotlin des classes et des énumérations :

enum class Color 
{ 
 Green, Purple, Blue, Red, Red 
} 
 
enum class ShapeType ...

En résumé

  • Une séquence est représentée par l’interface Sequence et peut être construite facilement grâce à la fonction sequenceOf.

  • Lorsqu’on enchaîne plusieurs opérateurs, la collection passe l’ensemble des éléments qu’elle contient au premier opérateur, avant de les passer au deuxième, etc.

  • Lorsqu’on enchaîne plusieurs opérateurs, la séquence passe le premier élément à tous les opérateurs avant de passer le deuxième élément à tous les opérateurs, etc.

  • Il est possible de passer d’une collection à une séquence grâce à la fonction asSequence.