kotlin "contains" 没有按预期工作
kotlin "contains" doesn't work as expected
我正在使用一种方法来过滤与 ID 匹配的首选项,我使用的是 contains
方法,但即使值相同,contains
也显示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 与 context.ids
具有相同的 id 值时,contains 在调试中为 false。我认为它可能与 context.ids
行 Json$JsonTextNode
中的类型有关。因为当我对硬编码的数值执行相同操作时,比较成功。
有什么想法吗?
谢谢!
如果 FanPreferences.id
的类型是 String
并且 context.ids
列表元素的类型是 JsonTextNode
,您将找不到等于给定 id 的元素string,因为不是String类型。
尝试在过滤之前将您的上下文 ID 映射到字符串列表:
val ids = context.ids.map { it.toString() }.toSet()
return context.preferences?.filter {
ids.contains(it.id)
}
请注意,在 JsonTextNode
上调用 toString()
可能不是从中获取字符串数据的最佳方式。最好查阅那个 class 的 API 文档来找出它。
我正在使用一种方法来过滤与 ID 匹配的首选项,我使用的是 contains
方法,但即使值相同,contains
也显示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 与 context.ids
具有相同的 id 值时,contains 在调试中为 false。我认为它可能与 context.ids
行 Json$JsonTextNode
中的类型有关。因为当我对硬编码的数值执行相同操作时,比较成功。
有什么想法吗?
谢谢!
如果 FanPreferences.id
的类型是 String
并且 context.ids
列表元素的类型是 JsonTextNode
,您将找不到等于给定 id 的元素string,因为不是String类型。
尝试在过滤之前将您的上下文 ID 映射到字符串列表:
val ids = context.ids.map { it.toString() }.toSet()
return context.preferences?.filter {
ids.contains(it.id)
}
请注意,在 JsonTextNode
上调用 toString()
可能不是从中获取字符串数据的最佳方式。最好查阅那个 class 的 API 文档来找出它。