Kotlin不同数据结构插入标题
测试代码:
DataTransUtils类:
package com.example.androidkotlindemo2.datatrans import android.util.Log /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/10/13 11:17 * Description : 数据转换 */ object DataTransUtils { /** * 测试入口 */ fun testTrans(){ var baseReqData = getData() var assList = baseReqData.assList println("testTrans start : ${assList.size} , ${assList}") //插入标题 processTitle(assList) assList.forEachIndexed { index, assBean -> //println("testTrans index : ${index}, ${assBean}") var singleMap : HashMap<Int, ArrayList<AppBean>>? = null if(assBean.type == AssBean.TYPE_NEED_TITLE){ if(singleMap == null){ singleMap = HashMap<Int, ArrayList<AppBean>>() } assBean.appBean?.let { singleMap[index]?.add(it) } } singleMap?.forEach { t, u -> } } println("testTrans end : ${assList.size} , ${assList}") } /** * 处理标题 */ private fun processTitle(assList : ArrayList<AssBean>){ //是否有标题 var isTitle = false //保存第1个下标值,在前面插入标题 var defaultPosition = -1 run titleLoop@{ assList.forEachIndexed { index, assBean -> if(assBean.type == AssBean.TYPE_NEED_TITLE){ //保存第1个值 if(defaultPosition == -1){ defaultPosition = index } isTitle = isHashTitle(assList, index) if(isTitle){ return@titleLoop } } } } if(!isTitle){ insertTitle(assList, defaultPosition, getAssTitle()) } } /** * 判断当前位置的前一个是否有标题 */ private fun isHashTitle(assList : ArrayList<AssBean>, position: Int) : Boolean{ //前一个下标值 var prePosition = position - 1 //防止数组越界 if(prePosition < 0 || prePosition >= assList.size){ return false } //获取当前下标值的前一个 var assBean = assList[prePosition] return assBean.type == AssBean.TYPE_TITLE } /** * 在当前位置插入标题 * @param assList 数据集合 * @param position 当前位置 * @param assTitle 标题 */ private fun insertTitle(assList : ArrayList<AssBean>, position: Int, assTitle : AssBean){ if(position < 0){ return } assList.add(position, assTitle) } /** * 获取测试数据 */ fun getData() : BaseReqData{ var baseReqData = BaseReqData() var assBean1 = getAssBean1() var assList = ArrayList<AssBean>() assList.add(assBean1) var assBean21 = getAssBean2("name_2_${1}") var assBean22 = getAssBean2("name_2_${2}") var assBean23 = getAssBean2("name_2_${3}") assList.add(assBean21) assList.add(assBean22) assList.add(assBean23) baseReqData.assList = assList return baseReqData } private fun getAssBean2(name : String) : AssBean{ var assBean = AssBean() assBean.appBean = getAppBean("packageName_2", name) assBean.type = AssBean.TYPE_NEED_TITLE return assBean } private fun getAssBean1() : AssBean{ var assBean = AssBean() assBean.appList = getAssBeanList1() assBean.type = AssBean.TYPE_NORMAL return assBean } private fun getAssBeanList1() : ArrayList<AppBean>{ var assList = ArrayList<AppBean>() for (i in 0..5){ var appBean1 = getAppBean("packageName_${i}", "name_1_${i}") assList.add(appBean1) } return assList } private fun getAppBean(packageName : String, name : String) : AppBean{ var appBean = AppBean() appBean.packageName = packageName appBean.name = name return appBean } private fun getAssTitle() : AssBean{ var assBean = AssBean() assBean.type = AssBean.TYPE_TITLE return assBean } }
BaseReqData类:
package com.example.androidkotlindemo2.datatrans /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/10/13 11:20 * Description : */ class BaseReqData { var assList : ArrayList<AssBean> = ArrayList() }
AssBean类:
package com.example.androidkotlindemo2.datatrans /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/10/13 11:18 * Description : */ class AssBean { var appList : ArrayList<AppBean> = ArrayList<AppBean>() var appBean : AppBean? = null var type = 0 companion object { //第1种 var TYPE_NORMAL = 1 //第2种 var TYPE_NEED_TITLE = 2 //标题 var TYPE_TITLE = 3 } }
AppBean类:
package com.example.androidkotlindemo2.datatrans /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/10/13 11:18 * Description : */ class AppBean { var packageName = "" var name = "" }