Si usa Kotlin, puede usar funciones de extensión como tales, por ejemplo:
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++))
}
}
También puede convertir a una lista, si lo desea. Ejemplo:
sparseArray.keysIterator().asSequence().toList()
Creo que incluso podría ser seguro eliminar elementos utilizando removeen LongSparseArraysí mismo (no en el iterador), ya que está en orden ascendente.
EDITAR: Parece que hay una manera aún más fácil, usando collection-ktx (ejemplo aquí ). Se implementa de una manera muy similar a lo que escribí, actally.
Gradle requiere esto:
implementation 'androidx.core:core-ktx:#'
implementation 'androidx.collection:collection-ktx:#'
Aquí está el uso de LongSparseArray:
val sparse= LongSparseArray<String>()
for (key in sparse.keyIterator()) {
}
for (value in sparse.valueIterator()) {
}
sparse.forEach { key, value ->
}
Y para aquellos que usan Java, puede usar LongSparseArrayKt.keyIterator, LongSparseArrayKt.valueIteratory LongSparseArrayKt.forEach, por ejemplo. Lo mismo para los otros casos.