Как выполнить действие для всех комбинаций элементов в списках?

У меня есть несколько списков, для простоты, допустим, 2:

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

И я хочу перебрать все комбинации этих возможных значений с помощью функции f: (String, Int): Unit :

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

Я хотел бы узнать идиоматический способ сделать это в котлине. Я думаю, что с верхней части головы это можно сделать с помощью вложенной карты. Что-то вроде:

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

EDIT : Это, похоже, не работает для меня, хотя, как он возвращается:

 [() -> 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 (name in names) for (day in days) f(name, day)