首页 > 解决方案 > 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.idsrows中的类型有关Json$JsonTextNode。因为当我对硬编码的数值做同样的事情时,比较是成功的。

有任何想法吗?

谢谢!

标签: arrayskotlincomparecontains

解决方案


如果FanPreferences.idisString的类型和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 文档以找到它。


推荐阅读