Ce-ar fi trebuit să se întoarcă la kotlin Fluxul prima funcție?

0

Problema

Eu sunt, folosind first funcția de kotlin flux. Motivul pentru care eu sunt, folosind acest first funcția este că nu trebuie să colecteze după prima dată. Dacă nu întoarce nici o valoare booleană, se face roșu subliniază că trebuie să se întoarcă o valoare booleană. Ce ar trebui să mă întorc? Nu există nici o problemă atunci când mă voi întoarce adevărat, dar vreau să știu ce înseamnă.

    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 Cod.

/**
 * 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

Cel mai bun răspuns

2

Această supraîncărcare Flow.first() este folosit pentru a obține prima valoare a debitului care se potrivește dat predicat. De aceea lambda se așteaptă să se întoarcă un boolean la sfârșitul anului. Pentru oricare valoare lambda returnează true, valoarea respectivă va fi returnat și fluxul va fi anulată.

Dacă aveți nevoie doar de prima valoare, ar trebui să-alte suprasarcină care nu acceptă un predicat lambda.

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

Btw nu cred tampon este necesar. Puteți elimina.

2021-11-24 06:26:16

Vă mulțumesc, ați Putea explica de ce tampon nu este necesară?
Lee WonJoong

Puteți lua o privire la documentația. În cazul tău, ai grijă doar despre prima valoare emise de flux astfel încât să nu trebuie tampon nimic.
Arpit Shukla

Oh, inteleg. Ca am nevoie doar de prima valoare, n-am nevoie de tampon. Vă mulțumesc!
Lee WonJoong

În alte limbi

Această pagină este în alte limbi

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