Intereting Posts
Spring Security несколько успешных поставщиков аутентификации Как получить второй фрагмент из списка popBackStack в pop? В чем разница между оператором «как» и «есть» в Котлине? Kotlin – генерировать toString () для не-данных класса Как инициализировать массив в Котлине? Как изменить стандартную оболочку Gradle и файл сборки в IntelliJ? Запросы Firebase никогда не заканчиваются на Android Частный конструктор в Котлине Присвоение не допускается при выражении? Проверка больших файлов XML на большие XSD, есть ли быстрый способ сделать это? Перехватчик Kotlintest и латинитовые вары Как сделать плагин идеи в градле генерировать правильную конфигурацию проекта для Kotlin? как получить доступ к внутренним свойствам из тестового кода Java RxJava с использованием Kotlin – как синхронизировать 2 асинхронных метода, рефакторинг с Java Как мне настроить изменяемые тестовые приборы в Spek?

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

У меня есть несколько списков, для простоты, допустим, 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)