Kotlin“包含”未按预期工作

时间:2019-04-13 00:11:22

标签: arrays kotlin compare contains

我正在使用一种过滤与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”

enter image description here

对于context.ids

enter image description here

但是,即使第一个和最后一个ID与context.preferences具有相同的ID值,在调试中contains还是false。我认为这可能与context.idscontext.ids中的类型有关。因为当我对数字值进行硬编码时,比较成功。

有什么想法吗?

谢谢!

1 个答案:

答案 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文档以找到答案。