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

Kotlin中如何基于多列表元素按索引匹配批量生成数据类实例

Kotlin 按规则组合多列表生成目标实例列表

预设代码

当前定义的列表与数据类如下:

val qrtr = listOf("Q1", "Q2", "Q3", "Q4")

data class X(val name: String, val location: String)
val x1 = X("John Doe", "USA")
val x2 = X("Jane Doe", "Singapore")
val allX = listOf(x1, x2)

data class Y(val title: String, val rating: Double)
val y1 = Y("Senior", 4.8)
val y2 = Y("Junior", 4.5)
val allY = listOf(y1, y2)

data class Z(val x: X, val y: Y, val quarter: String)

小提示:原定义的Z类中quarter参数前漏了val修饰,不加该修饰符的话quarter仅作为构造参数存在,不会成为类的成员属性,外部无法直接访问。

需求逻辑

需要实现的规则拆解为两步:

  • 将allX和allY的元素按下标一一配对
  • 每一组配对的(x,y)元素,分别和qrtr中的每一个季度值组合,生成对应的Z实例,最终汇总为一维列表
    等价的手动实现效果:
val z1 = Z(x1, y1, "Q1")
val z2 = Z(x1, y1, "Q2")
val z3 = Z(x1, y1, "Q3")
val z4 = Z(x1, y1, "Q4")
val z5 = Z(x2, y2, "Q1")
val z6 = Z(x2, y2, "Q2")
val z7 = Z(x2, y2, "Q3")
val z8 = Z(x2, y2, "Q4")
val allZ = listOf(z1, z2, z3, z4, z5, z6, z7, z8)

简便实现方案

直接使用Kotlin标准库的集合操作函数即可完成,无需额外依赖:

方案1:使用zip配对

zip是Kotlin标准库提供的同索引配对函数,默认以两个列表中更短的长度为准配对,不会出现索引越界,配对后通过展平操作生成所有Z实例:

val allZ = allX.zip(allY) { x, y ->
    qrtr.map { quarter -> Z(x, y, quarter) }
}.flatten()

方案2:按索引遍历

如果明确知道allX和allY长度一致,也可以直接按下标遍历,逻辑更直观:

val allZ = allX.indices.flatMap { idx ->
    qrtr.map { q -> Z(allX[idx], allY[idx], q) }
}

两种方案运行结果和手动编写的代码完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:01:06