如何对列表中的元素的所有组合执行操作?

我有多个列表,为了简单起见,让我们说2:

val names = listOf("John", "Tom") val days = listOf(1, 2, 3) 

我想用函数f: (String, Int): Unit遍历这些可能值的所有组合f: (String, Int): Unit

 f("John", 1) f("John", 2) f("John", 3) f("Tom", 1) f("Tom", 2) f("Tom", 3) 

我想找出在kotlin中做到这一点的惯用方法。 关闭我的头顶,我想这可以用一个嵌套的地图来完成。 有些东西是:

 a.map { itA -> b.map { itB -> f(itA, itB) } } 

编辑 :这似乎并没有为我工作,虽然它返回:

 [() -> kotlin.collections.List<kotlin.Unit>, () -> kotlin.collections.List<kotlin.Unit>] 

forEach是最接近的,因为它可以得到:

 names.forEach { i -> days.forEach { j -> f(i, j)} } 

例:

 private fun f(i: String, j: Int) = println("$i,$j") 

结果:

 John,1 John,2 John,3 Tom,1 Tom,2 Tom,3 

常规for循环出了什么问题?

 for (name in names) for (day in days) f(name, day)