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
相关产品推荐
相关产品推荐

