Si vous utilisez Kotlin, vous pouvez utiliser les fonctions d'extension en tant que telles, par exemple:
fun <T> LongSparseArray<T>.valuesIterator(): Iterator<T> {
val nSize = this.size()
return object : Iterator<T> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next(): T = valueAt(i++)
}
}
fun <T> LongSparseArray<T>.keysIterator(): Iterator<Long> {
val nSize = this.size()
return object : Iterator<Long> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next(): Long = keyAt(i++)
}
}
fun <T> LongSparseArray<T>.entriesIterator(): Iterator<Pair<Long, T>> {
val nSize = this.size()
return object : Iterator<Pair<Long, T>> {
var i = 0
override fun hasNext(): Boolean = i < nSize
override fun next() = Pair(keyAt(i), valueAt(i++))
}
}
Vous pouvez également convertir en liste, si vous le souhaitez. Exemple:
sparseArray.keysIterator().asSequence().toList()
Je pense qu'il pourrait même être sûr de supprimer des éléments en utilisant remove
sur LongSparseArray
lui - même (pas sur l'itérateur), car il est dans l'ordre croissant.
EDIT: Il semble qu'il existe un moyen encore plus simple, en utilisant collection-ktx (exemple ici ). Il est mis en œuvre de manière très similaire à ce que j'ai écrit, en fait.
Gradle exige ceci:
implementation 'androidx.core:core-ktx:#'
implementation 'androidx.collection:collection-ktx:#'
Voici l'utilisation de LongSparseArray:
val sparse= LongSparseArray<String>()
for (key in sparse.keyIterator()) {
}
for (value in sparse.valueIterator()) {
}
sparse.forEach { key, value ->
}
Et pour ceux qui utilisent Java, vous pouvez utiliser LongSparseArrayKt.keyIterator
, LongSparseArrayKt.valueIterator
et LongSparseArrayKt.forEach
, par exemple. Idem pour les autres cas.