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.idsJson$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 文档来找出它。