我正在使用一种过滤与ID匹配的首选项的方法,我正在使用contains
方法,但是即使值相同,contains
仍显示{ 1}}。该方法如下:
false
数组的值是:
private fun filterPreferencesByIds(context: MyPodCastPresenterContext): List<FanPreferences> {
return context.preferences?.filter {
context.ids.contains(it.id)
}
}
:
“ B52594F5-80A4-4B18-B5E2-8F7B12E92958”和“ 3998EDE7-F84B-4F02-8E15-65F535080100”
对于context.ids
:
但是,即使第一个和最后一个ID与context.preferences
具有相同的ID值,在调试中contains还是false。我认为这可能与context.ids
行context.ids
中的类型有关。因为当我对数字值进行硬编码时,比较成功。
有什么想法吗?
谢谢!
答案 0 :(得分:4)
如果FanPreferences.id
的类型为String
,而context.ids
列表元素的类型为JsonTextNode
,则找不到与给定id字符串相等的元素,因为它不是String类型。
尝试在过滤之前将您的上下文ID映射到字符串列表:
val ids = context.ids.map { it.toString() }.toSet()
return context.preferences?.filter {
ids.contains(it.id)
}
请注意,在toString()
上调用JsonTextNode
可能不是从中获取字符串数据的最佳方法。最好查阅该类的API文档以找到答案。