O que eu deveria ter para retornar ao Fluxo de kotlin primeira função?

0

Pergunta

Eu estou usando first função de kotlin fluxo. A razão pela qual eu estou usando esse first função é a de que eu não tenho para recolher após o primeiro tempo. Se eu não retornar nenhum valor booleano, faz sublinhado vermelho que eu tenho que devolver um valor booleano. O que devo voltar? Não há qualquer problema quando eu acabei de voltar de verdade, mas eu quero saber o que isso significa.

    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 Código.

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

Melhor resposta

2

Essa sobrecarga de Flow.first() é usado para obter o valor da vazão que corresponde a determinado predicado. É por isso que o lambda espera você para retornar um boolean no final. Para qualquer valor de lambda retorna true, esse valor será devolvido e o fluxo será cancelada.

Se você precisar apenas do primeiro valor, deve a outros sobrecarga que não aceita um predicado lambda.

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

Btw, eu não acho buffer é necessária. Você pode remover isso.

2021-11-24 06:26:16

Obrigado, você Poderia explicar por que o buffer não é necessário?
Lee WonJoong

Você pode dar uma olhada em sua documentação. No seu caso, você só se preocupam com o primeiro valor emitida pelo fluxo, de modo que você não precisa de buffer de nada.
Arpit Shukla

Ah, eu entendo. Como só tenho o primeiro valor, eu não preciso de buffer. Obrigado!
Lee WonJoong

Em outros idiomas

Esta página está em outros idiomas

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