假设我有一个
datastore
包含一些 booleanPrefrencesKey
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
我想获取其值为的所有键
true
:
suspend fun getTrueKeys(): Set<Preferences.Key<*>>? {
...
}
我怎样才能实现这一目标?谢谢
我能想到的一种可能的方法是将所有密钥保留在列表中,例如:
val keys = listOf("key1", "key2")
context.dataStore.data.map { preferences ->
val keyWithTrueValue = keys.filter { key ->
preferences[key]!! == true
}
// keyWithTrueValue now contains all true value keys
}
首先我们创建一个函数来获取所有可用的键,并可以修改@rasfarr5的解决方案来过滤这些键
suspend fun getAllKeys(): Set<Preferences.Key<*>>? = context.assetStatusDS.data
.map {
it.asMap().keys
}.firstOrNull()
suspend fun getKeysWith(condition: Boolean): Set<Preferences.Key<*>>? {
return getAllKeys()?.filter { key ->
context.assetStatusDS.data.map {
it[key] == condition
}.firstOrNull()!!
}?.toSet()
}
我遇到了类似的问题。这是我最终实现的:
suspend fun getTrueKeys() : Set<Preferences.Key<*>>? {
var keys = context.dataStore.data.map {
preferences ->
preferences.asMap().filter {
it.value == true
}.keys
}.first()
return keys
}
希望它可以帮助其他面临这个问题的人!