arrays - kotlin“包含”没有按预期工作
问题描述
我正在使用一种过滤与 id 匹配的首选项的方法,我正在使用该contains
方法,但即使值相同,它也会在每次迭代contains
中显示 a 。false
该方法如下所示:
private fun filterPreferencesByIds(context: MyPodCastPresenterContext): List<FanPreferences> {
return context.preferences?.filter {
context.ids.contains(it.id)
}
}
数组的值是:
对于context.ids
:“B52594F5-80A4-4B18-B5E2-8F7B12E92958”和“3998EDE7-F84B-4F02-8E15-65F535080100”
对于context.preferences
:
但是即使,当第一个和最后一个 id 具有与 相同的 id 值时context.ids
,在调试中包含为 false。我认为这可能与context.ids
rows中的类型有关Json$JsonTextNode
。因为当我对硬编码的数值做同样的事情时,比较是成功的。
有任何想法吗?
谢谢!
解决方案
如果FanPreferences.id
isString
的类型和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 文档以找到它。
推荐阅读
- react-native - 在返回函数中反应本机状态错误
- python - 索引二维数组/列表
- asp.net-core - ASP.Net Core SignalR 不记名令牌协商
- wordpress - 更改 Woocommerce 分页永久链接
- phpunit - 如何操作控制器测试的应用程序配置?
- javascript - 如何使用 javascript 查询 AJAX 导入的表(而不是本地表)
- javascript - Jison parser generator,shift减少语法冲突,如何解决?
- jooq - 如何在运行时使用 JOOQ 重写表限定符
- javascript - externals webpack not working (same result as without it)
- ios - Flutter: Abnormally Release sizes