You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin过滤嵌套category数组的JSON列表仅返回第一条问题求助

错误原因

  • 过滤逻辑用错集合操作符
    all 操作符要求集合内所有元素都满足判断条件才返回true。id为0002的条目category包含01、03两个值,3不满足等于01的条件,所以被all过滤掉了。你需要的是只要包含目标值就保留,应该用any操作符。
  • 变量作用域冲突
    你在setDataList方法内用var listFiltered重新声明了一个和类成员变量同名的局部变量,过滤后的结果只存在于这个局部变量中,类成员的listFiltered根本没有被更新。
  • 可选的类型不匹配问题
    你提供的JSON中category字段是数字类型,JSON规范不允许数字带前导零,解析后01会转为数字1,如果你的MyDataItem中category是List<Int>类型,和字符串"01"做相等判断永远返回false,需要统一两侧的判断类型。
  • 冗余安全调用
    参数list声明为非空List<MyDataItem>类型,不需要加?做安全调用,属于冗余代码。

修正后的代码

var list = mutableListOf<MyDataItem>()
var listFiltered = mutableListOf<MyDataItem>()

fun setDataList(list: List<MyDataItem>) {
    this.list = list.toMutableList()
    // 去掉var直接给成员变量赋值,改用any操作符,根据category实际类型调整判断条件
    listFiltered = list.filter { item ->
        // 如果category是List<Int>写it == 1,如果是List<String>写it == "01"
        item.category.any { it == 1 }
    }.toMutableList()
    notifyDataSetChanged()
}

override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
    val currentItem = listFiltered[position]
    holder.binding.txtDate.text = currentItem.startdate
    holder.binding.txtTitle.text = currentItem.title.rendered
}

内容的提问来源于stack exchange,提问作者gkaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:03