Cambia una list para mapear en Kotlin mientras personalizas esta conversión

var listOfNums = listOf(1,9,8,25,5,44,7,95,9,10) var mapOfNums = listOfNums.map { it to it+1 }.toMap() println(mapOfNums) 

resultado

 {1=2, 9=10, 8=9, 25=26, 5=6, 44=45, 7=8, 95=96, 10=11} 

mientras necesito este resultado, agrega contenidos del siguiente elemento al elemento actual, mientras que necesito asignar el elemento actual al siguiente elemento

mi resultado meta

 {1=9, 8=25, 5=44, 7=59, 9=10} 

Para Kotlin 1.1:

Primero, use zip para crear una list con pares adyacentes. Luego, suelta cada dos pares, antes de convertirlo en un Map . Me gusta esto:

 val list = listOf(1,9,8,25,5,44,7,95,9,10) val mapOfNums = list.zip(list.drop(1)) .filterIndexed { index, pair -> index % 2 == 0 } .toMap()) 

Para Kotlin 1.2:

Kotlin 1.2 trae la function chunked que hará esto un poco más fácil. Esta function divide la list en sublists de la longitud dada. Entonces puedes hacer esto:

 val list = listOf(1,9,8,25,5,44,7,95,9,10) val mapOfNums = list.chunked(2).associate { (a, b) -> a to b } 

Con la ayuda de RxJava

 import io.reactivex.Observable ... val listOfNums = listOf(1,9,8,25,5,44,7,95,9,10) val mapOfNums = Observable.fromIterable(listOfNums) .buffer(2) .map { it[0] to it[1] } .collect( { mutableMapOf<Int, Int>() }, { map: MutableMap<Int, Int>, (first, second) -> map.put(first, second) } ) .blockingGet() println(mapOfNums) // {1=9, 8=25, 5=44, 7=95, 9=10} 

Podemos pasar cada segundo índice y map listOfNums [it] a listOfNums [it + 1]

 val listOfNums = listOf(1,9,8,25,5,44,7,95,9,10) val mapOfNums = mutableMapOf<Int, Int>() (listOfNums.indices step 2).forEach { mapOfNums[listOfNums[it]] = listOfNums[it + 1] } println(mapOfNums) 

EDITAR: Otra mejor solución sugerida por ephemient:

  (1..listOfNums.lastIndex step 2).associate { listOfNums[it - 1] to listOfNums[it] } 

¡Elegante!

  • La aplicación no implementa dagger.android.HasDispatchingActivityInjector
  • Kotlin ejecuta en Android Studio error prompt "Gradle sync failed: Tiempo de espera agotado de la connection: connect Consulte el logging de IDE para get más detalles (Ayuda | Mostrar logging)"
  • kotlin jvmname ignorado por Gradle?
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin
  • Revertir el código fuente a Java después de la conversión Kotlin> Java de IntelliJ
  • ¿Cómo se implementa la aplicación fetch?
  • Registro de SQL con Expuesto en Spring Boot
  • Patrón Regex Kotlin
  • SugarORM + Kotlin: list de reference no modificada "listAll"
  • Combinar / fusionar classs de datos en Kotlin
  • Kotlin replace isEmpty () y last () con lastOrNull () dentro de una Collection