Kotlin中如何更优雅地实现两个列表的全元素配对?
实现两个列表的全元素配对(笛卡尔积)
首先要明确:zip函数并不适合这个场景——zip是将两个列表对应位置的元素配对(比如list1[0]配list2[0],list1[1]配list2[1]),而你需要的是所有元素的全组合(笛卡尔积),两者逻辑完全不同。
在Kotlin中,用flatMap + map的组合就能简洁实现需求,替代嵌套循环:
val list1 = listOf(1, 2, 3) val list2 = listOf('A', 'B', 'C') val result = list1.flatMap { item1 -> list2.map { item2 -> item1 to item2 // 等价于Pair(item1, item2) } } println(result) // 输出结果:[(1, A), (1, B), (1, C), (2, A), (2, B), (2, C), (3, A), (3, B), (3, C)]
代码逻辑说明:
flatMap遍历list1的每个元素,对每个元素item1,执行后续的map操作;map遍历list2的每个元素item2,将item1和item2配对成Pair;flatMap会把所有map生成的子列表合并成一个单一列表,最终得到所有可能的元素配对。
这种写法相比嵌套循环的优势:
- 无需手动创建并维护可变列表(
mutableListOf),代码更简洁; - 采用函数式编程风格,逻辑表达更直观,可读性更强;
- 默认生成不可变列表,符合Kotlin推崇的不可变优先原则。
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

