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

如何将同标题的MyAdList数据分组为二维数组?

按标题分组MyAdList的正确实现

你的原代码存在两个核心问题:

  • 每次添加的都是完整的原MyAdList列表,而非分组后的子元素,最终testData里会全是同一个列表的引用,完全不符合分组需求
  • 逻辑错误:仅判断当前元素与前一个元素的标题是否相同,但没有维护正在构建的分组,无法将同标题元素归集到同一个子列表中

方法一:手动循环实现分组

val myAdList = it.responseData.myAdList
val testData: ArrayList<ArrayList<AdvertisingResponse.MyAdList>> = ArrayList()

if (myAdList.isEmpty()) {
    // 空列表直接返回,避免后续逻辑报错
    return@xxx // 根据实际上下文调整,比如lambda里用return@forEach
}

// 初始化第一个分组,添加第一个元素
var currentGroup = ArrayList<AdvertisingResponse.MyAdList>()
currentGroup.add(myAdList[0])

for (i in 1 until myAdList.size) {
    val currentItem = myAdList[i]
    val lastItemInGroup = currentGroup.last()
    
    if (currentItem.title == lastItemInGroup.title) {
        // 标题相同,加入当前分组
        currentGroup.add(currentItem)
    } else {
        // 标题不同,将当前分组存入结果,新建分组
        testData.add(currentGroup)
        currentGroup = ArrayList()
        currentGroup.add(currentItem)
    }
}

// 别忘了把最后一个分组加入结果
testData.add(currentGroup)

方法二:用Kotlin标准库简化实现

Kotlin的groupBy函数可以直接按指定键分组,再将结果转换为需要的二维ArrayList结构:

val myAdList = it.responseData.myAdList
val testData = ArrayList<ArrayList<AdvertisingResponse.MyAdList>>()

// 先按title分组,再将每个分组的List转成ArrayList存入结果
myAdList.groupBy { it.title }
    .values
    .forEach { group ->
        testData.add(ArrayList(group))
    }

注:如果原列表中同标题的元素是连续的,两种方法结果一致;如果同标题元素不连续,groupBy会将所有同标题元素归为一组,而手动循环只会将连续的同标题元素分组。根据你的需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:45:59