Que dois-je retourner à kotlin Flux de première fonction?

0

La question

Je suis à l'aide de first la fonction de kotlin flux. La raison pour laquelle je suis en utilisant ce first la fonction, c'est que je n'ai pas à recueillir après la première fois. Si je ne reviens pas toute valeur booléenne, il la rend rouge de souligner que j'ai du renvoyer une valeur booléenne. Que dois-je retourner? Il n'y a pas un problème lorsque je viens de retourner vrai, mais je veux savoir ce qu'il signifie.

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

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

La meilleure réponse

2

Cette surcharge de Flow.first() elle est utilisée pour obtenir la première valeur de débit, ce qui correspond à la donnée de prédicat. C'est pourquoi le lambda attend de vous retourner un booléen à la fin. Pour quelle valeur du lambda renvoie la valeur true, la valeur qui sera retournée et le flux sera annulée.

Si vous avez besoin seulement la première valeur, vous devriez l'autre surcharge qui n'accepte pas un prédicat lambda.

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

Btw, je ne pense pas que le tampon est nécessaire. Vous pouvez le retirer.

2021-11-24 06:26:16

Merci à vous, Pourriez-vous expliquer pourquoi le tampon n'est pas nécessaire?
Lee WonJoong

Vous pouvez prendre un coup d'oeil à sa documentation. Dans votre cas, vous ne se soucient que de la première valeur émise par le flux, donc vous n'avez pas besoin de tampon quoi que ce soit.
Arpit Shukla

Oh, je comprends. Comme je l'ai seulement besoin de la première valeur, je n'ai pas besoin de la mémoire tampon. Merci!!!!
Lee WonJoong

Dans d'autres langues

Cette page est dans d'autres langues

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