Все возможные комбинации из двух списков

Учитывая, что у меня есть два списка:

val ints = listOf(0, 1, 2) val strings = listOf("a", "b", "c") 

и я хочу, чтобы все возможные комбинации их элементов

0a, 1a, 2a, 0b т. Д.

есть более элегантный способ, чем:

 ints.forEach { int -> strings.forEach { string -> println("$int $string") } } 

Вы можете написать эти функции расширения на основе функции flatMap stdlib:

 // Extensions fun <T, S> Collection<T>.cartesianProduct(other: Iterable<S>): List<Pair<T, S>> { return cartesianProduct(other, { first, second -> first to second }) } fun <T, S, V> Collection<T>.cartesianProduct(other: Iterable<S>, transformer: (first: T, second: S) -> V): List<V> { return this.flatMap { first -> other.map { second -> transformer.invoke(first, second) } } } // Example fun main(args: Array<String>) { val ints = listOf(0, 1, 2) val strings = listOf("a", "b", "c") // So you could use extension with creating custom transformer strings.cartesianProduct(ints) { string, int -> "$int $string" }.forEach(::println) // Or use more generic one strings.cartesianProduct(ints) .map { (string, int) -> "$int $string" } .forEach(::println) } 
  • Преобразование java-функции, которая использует байты для Kotlin
  • kotlin-runtime.jar не существует
  • Закрыть / Скрыть SoftinputKeyboard в kotlin
  • Доступ к внешней ценности внутри
  • Как назначить новое значение, если вы устанавливаете setter private в kotlin?
  • Тип универсального парного типа для дополнительных целей
  • Regex или Wildcard в заявлении Котлина?
  • Отсутствует функция Kotlin View setEnabled?
  • Не удается запустить проект kotlin на Android Studio 3.0
  • Рекурсивная проблема с toString в Котлине
  • Не удалось запустить модульные тесты в новом проекте Android Kotlin
  • Давайте будем гением компьютера.