Se usi Kotlin, puoi usare le funzioni di estensione come tali, ad esempio:
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++))
}
}
Se lo desideri, puoi anche convertirlo in un elenco. Esempio:
sparseArray.keysIterator().asSequence().toList()
Penso che potrebbe anche essere sicuro eliminare gli elementi usando remove
su LongSparseArray
se stesso (non sull'iteratore), poiché è in ordine crescente.
EDIT: Sembra che ci sia anche un modo più semplice, usando collection-ktx (esempio qui ). È implementato in modo molto simile a quello che ho scritto, in realtà.
Gradle richiede questo:
implementation 'androidx.core:core-ktx:#'
implementation 'androidx.collection:collection-ktx:#'
Ecco l'uso per LongSparseArray:
val sparse= LongSparseArray<String>()
for (key in sparse.keyIterator()) {
}
for (value in sparse.valueIterator()) {
}
sparse.forEach { key, value ->
}
E per coloro che utilizzano Java, è possibile utilizzare LongSparseArrayKt.keyIterator
, LongSparseArrayKt.valueIterator
e LongSparseArrayKt.forEach
, per esempio. Lo stesso per gli altri casi.