Convert Flow<List<>> to List<> From Room database

问题描述 投票:0回答:1

我正在尝试从我的房间数据库中获取玩家列表。在 Flow 中获取它,然后我将其转换为列表 我想遍历列表以检查哪个玩家应该赢/输/平。

我认为我的播放器列表有问题,因为我什至无法在 Log.d 中显示它

val playerList = playerStatsRepository.getAllPlayerStats(tournament.id)
            .flatMapConcat { it.asFlow() }.toList()

我的锦标赛ViewModel https://github.com/DawidSiudeja/Tournament/blob/master/app/src/main/java/com/example/tournamentapp/TournamentViewModel.kt

Flow转List的好方法?

kotlin android-jetpack-compose android-room viewmodel
1个回答
0
投票

要简单地将 Flow 转换为其包含类型,您可以使用

.first()
。请注意,如果此值在第一次读取后稍后发生变化,.first() 将不会接受它,因为它只是读取第一个值,然后停止观察流程。

当您使用 Jetpack compose 时,如果这是您在可组合项中使用的值,您可以通过

tournamentViewModel.playerList.collectAsState(initialValue = emptyList())

将流转换为状态

注意:将 Flow 收集为状态时,您必须提供初始值。为避免这种情况,您可以通过 .stateIn(..) 方法(see docs

将您的流程转换为视图模型中的 StateFlow

要直接回答您的问题,这应该可以解决您的问题:

val playerList = playerStatsRepository.getAllPlayerStats(tournament.id).first()
© www.soinside.com 2019 - 2024. All rights reserved.