Čo by som mal mať vrátiť na kotlin Prietok prvá funkcia?

0

Otázka

Ja používam first funkcia z kotlin toku. Dôvod, prečo som pomocou tohto first faktom je, že nemusím zbierať po prvý raz. Ak nechcem vrátiť všetky boolean hodnotu, to je červená zdôrazňujú, že musím vrátiť boolean hodnotu. Čo by som mal vrátiť? Tu nie je žiadny problém, keď som len vrátiť pravda, ale ja chcem, aby vedeli, čo to znamená.

    private fun getGroupNameData() {
        viewModelScope.launch {
            repository.loadGroupsWithFlow()
                .buffer()
                .first { newList ->
                    groupData.clear()
                    newList.forEach { newGroupData ->
                        groupData[newGroupData.id] = newGroupData.name
                    }
                    true // <- what is this boolean value?
                }
        }
    }

first Kód.

/**
 * The terminal operator that returns the first element emitted by the flow matching the given [predicate] and then cancels flow's collection.
 * Throws [NoSuchElementException] if the flow has not contained elements matching the [predicate].
 */
public suspend fun <T> Flow<T>.first(predicate: suspend (T) -> Boolean): T {
    var result: Any? = NULL
    collectWhile {
        if (predicate(it)) {
            result = it
            false
        } else {
            true
        }
    }
    if (result === NULL) throw NoSuchElementException("Expected at least one element matching the predicate $predicate")
    return result as T
}
1

Najlepšiu odpoveď

2

Tento preťaženiu Flow.first() používa sa dostať na prvý hodnota prietoku, ktorý zodpovedá daným predikát. To je dôvod, prečo lambda očakáva, že budete vrátiť boolean na konci. Pre podľa toho, ktorá hodnota lambda vracia true (pravda), že hodnota bude sa vrátil a prietoku bude zrušená.

Ak potrebujete len prvú hodnotu, mali by ste iné preťaženie, ktoré neakceptuje predikát lambda.

val newList = repository.loadGroupsWithFlow().buffer().first() // Use this first()
groupData.clear()
newList.forEach { newGroupData ->
    groupData[newGroupData.id] = newGroupData.name
}

Btw ja si nemyslím, že rezervy je potrebné. Môžete odstrániť túto.

2021-11-24 06:26:16

Ďakujem, Mohli by ste vysvetliť, prečo buffer nie je potrebné?
Lee WonJoong

Môžete sa pozrieť na jeho dokumentáciu. Vo vašom prípade ste sa stará len o prvú hodnotu emitovaných tok takže sa nemusíte buffer nič.
Arpit Shukla

Ach, chápem. Ako som len potrebné prvá hodnota, nepotrebujem buffra. Ďakujeme!
Lee WonJoong

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................