Java中如何对两个List<Int>按元素位置配对合并得到嵌套列表
两个Int列表按位置配对实现方案
你之前得到笛卡尔积是因为使用了嵌套for循环,遍历第一个列表的每个元素时全量遍历了第二个列表的所有元素,才生成了所有元素的交叉组合。以下是正确实现方式:
方案1:使用Kotlin标准库内置zip函数(推荐)
Kotlin 标准库原生提供zip扩展函数,专门用于两个集合按索引位置一一配对,代码最简:
val list1 = listOf(1, 2, 3) val list2 = listOf(4, 5, 6) // 配对后直接转换为List<List<Int>>结构 val pairedResult = list1.zip(list2) { element1, element2 -> listOf(element1, element2) }
默认情况下如果两个列表长度不一致,zip会以较短列表的长度为准,长列表多余的元素会被自动忽略。
方案2:手动单循环实现
如果需要自定义配对逻辑,不依赖内置函数,只需遍历公共索引即可,不要写嵌套循环:
val list1 = listOf(1, 2, 3) val list2 = listOf(4, 5, 6) val result = mutableListOf<List<Int>>() // 取两个列表的最小长度作为遍历上限,避免索引越界 val commonLength = minOf(list1.size, list2.size) for (index in 0 until commonLength) { result.add(listOf(list1[index], list2[index])) }
不等长列表特殊处理
如果业务要求以较长列表长度为准,缺省位置补默认值(比如补0),可以调整为以下逻辑:
val list1 = listOf(1, 2, 3, 7) val list2 = listOf(4, 5, 6) val result = mutableListOf<List<Int>>() val maxLength = maxOf(list1.size, list2.size) for (index in 0 until maxLength) { val element1 = list1.getOrElse(index) { 0 } val element2 = list2.getOrElse(index) { 0 } result.add(listOf(element1, element2)) } // 输出结果为 [[1,4], [2,5], [3,6], [7,0]]
内容的提问来源于stack exchange,提问作者pierbin24
相关产品推荐
相关产品推荐

