Wenn Sie Kotlin verwenden, können Sie Erweiterungsfunktionen als solche verwenden, zum Beispiel:
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++))
}
}
Wenn Sie möchten, können Sie auch in eine Liste konvertieren. Beispiel:
sparseArray.keysIterator().asSequence().toList()
Ich denke , es könnte sogar zu löschen Gegenstände sicher sein , mit remove
auf der LongSparseArray
selbst (nicht auf dem Iterator), wie sie in aufsteigender Reihenfolge ist.
BEARBEITEN: Es scheint noch einfacher zu sein, mit collection-ktx (Beispiel hier) ). Es ist sehr ähnlich implementiert wie das, was ich tatsächlich geschrieben habe.
Gradle benötigt dies:
implementation 'androidx.core:core-ktx:#'
implementation 'androidx.collection:collection-ktx:#'
Hier ist die Verwendung für LongSparseArray:
val sparse= LongSparseArray<String>()
for (key in sparse.keyIterator()) {
}
for (value in sparse.valueIterator()) {
}
sparse.forEach { key, value ->
}
Und für diejenigen , die Java verwenden, können Sie verwenden LongSparseArrayKt.keyIterator
, LongSparseArrayKt.valueIterator
und LongSparseArrayKt.forEach
zum Beispiel. Gleiches gilt für die anderen Fälle.