Kotlin中如何声明初始化Array<List<CategoryDO>>并分离分类子分类
解决Kotlin中分类与子分类数据分离适配的问题
针对你遇到的把分类和子分类分离并适配到CategoryAdapter的问题,我来给你拆解步骤和代码示例:
1. 如何将子分类列表添加到Array<List<CategoryDO>>对象中?
核心思路就是遍历主分类列表,提取每个主分类对应的子分类集合,再把这些集合转换成Array格式。
假设你已经通过Retrofit或者Gson等工具把API返回的JSON解析成了List<CategoryDO>(包含层级结构的完整分类数据),接下来只需要:
- 遍历这个主分类列表,逐个取出每个分类的
subCategories属性 - 把所有子分类集合收集成一个
List<List<CategoryDO>> - 最后调用
toTypedArray()方法把这个List转换成Array<List<CategoryDO>>
2. 如何在Kotlin中声明并初始化Array<List<CategoryDO>>?
在Kotlin里,你可以直接通过主分类列表的映射操作来初始化这个数组,不需要手动逐个添加。当然也可以初始化空数组做备用场景。
完整代码示例
假设你已经完成了JSON解析,得到了mainCategories: List<CategoryDO>,接下来的处理代码如下:
// 1. 解析API返回的JSON,得到包含子分类的主分类列表(这里替换成你的实际解析逻辑) val mainCategories: List<CategoryDO> = yourApiService.getCategories().execute().body() ?: emptyList() // 2. 提取所有子分类,转换成Array<List<CategoryDO>> val subCategoriesArray: Array<List<CategoryDO>> = mainCategories.map { category -> // 处理subCategories为null的情况,默认返回空列表避免空指针 category.subCategories ?: emptyList() }.toTypedArray() // 3. 初始化CategoryAdapter val adapter = CategoryAdapter( context = this, groupItem = mainCategories, contentItem = subCategoriesArray, imageOnClickListener = yourClickListener // 替换成你的实际点击事件 )
补充说明
- 用
map操作是因为它能简洁地遍历主分类列表,把每个元素转换成我们需要的子分类集合 - 加入
category.subCategories ?: emptyList()是为了避免空指针:你的CategoryDO里subCategories是可空类型,如果某个分类没有子分类,直接取值会得到null,用Elvis操作符转成空列表能保证后续Adapter运行稳定 - 如果需要初始化一个空的
Array<List<CategoryDO>>,可以直接写arrayOf<List<CategoryDO>>()
这样处理后,主分类数据存在mainCategories里,每个主分类对应的子分类集合按顺序存在subCategoriesArray中,正好符合CategoryAdapter的构造参数要求。
内容的提问来源于stack exchange,提问作者Keval Gangani
相关产品推荐
相关产品推荐

