Supposons que l'exemple Kotlin suivant mappe l'ensemble source src
à un ensemble de destination dst
:
private val src: Set<String> = setOf("hello", "world")
private val dst: Set<Int> = src.map { it.length }.toSet()
Cela fonctionne bien. Cependant, l'inspection du code d'IntelliJ suggère: La chaîne d'appel sur la collecte doit être convertie en "séquence":
L'application de cette suggestion entraîne
private val dst: Set<Int> = src.asSequence().map { it.length }.toSet()
Quel en est l'avantage?
Dans ce cas, la suggestion n'est pas optimale. La bonne façon de réécrire ce code (qui n'entraîne également aucun avertissement IntelliJ) est la suivante:
src.mapTo(hashSetOf()) { it.length }
Cela évitera la création d'une liste intermédiaire qui sera ensuite convertie en un ensemble; les données seront ajoutées immédiatement à l'ensemble résultant.
Set.map
renvoie une liste que vous jetez immédiatement après l'avoir convertie en un ensemble. L'avantage de asSequence
est que la séquence effectue la conversion, probablement sans liste temporaire.