Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

304
Vistas
¿Cómo combinar dos listas de diferentes longitudes en kotlin?

Quiero combinar dos listas de diferentes longitudes. Por ejemplo;

 val list1 = listOf(1,2,3,4,5) val list2 = listOf("a","b","c")

quiero salir asi

 (1,"a",2,"b",3,"c",4,5)

¿Hay alguna sugerencia?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede usar la función .zip para eso

 list1.zip(list2){ a,b -> listOf(a,b)}.flatten()

El único problema es que solo procesará elementos, con ambos conjuntos, por lo que si (como en el ejemplo) tenemos un tamaño diferente, no funcionará

La alternativa podría ser agregar marcadores específicos y filtrarlos o simplemente usar iteradores para eso. Encontré una solución elegante con la función de sequence{..}

 val result = sequence { val first = list1.iterator() val second = list2.iterator() while (first.hasNext() && second.hasNext()) { yield(first.next()) yield(second.next()) } yieldAll(first) yieldAll(second) }.toList()
over 4 years ago · Santiago Trujillo Denunciar

0

  1. Si los elementos de las listas de origen pueden aparecer en cualquier orden en la lista resultante, entonces
 >>> list1 + list2 res12: kotlin.collections.List<kotlin.Any> = [1, 2, 3, 4, 5, a, b, c]
  1. Si los elementos de las listas de origen deben alternarse en la lista resultante y la lista1 es más larga que la lista2, entonces
 >>> list1.zip(list2).flatMap { listOf(it.first, it.second) } + list1.drop(list2.size) res16: kotlin.collections.List<kotlin.Any> = [1, a, 2, b, 3, c, 4, 5]
over 4 years ago · Santiago Trujillo Denunciar

0

Podrías hacerlo así:

 val mergedList = with(setOf(list1, list2).sortedByDescending { it.count() }) { first().mapIndexed { index, e -> listOfNotNull(e, last().getOrNull(index)) } }.flatten()

Primero, coloca ambas listas en un Set , luego las ordena (descendentemente) por el número de elementos que producen una lista de listas.

La primera lista que tiene la mayoría de los elementos se utilizará para la iteración.

Usando mapIndexed puede usar el index para acceder al elemento correspondiente en la segunda lista. Si no hay ninguno, se devuelve null y listOfNotNull lo filtrará. Al final, aplanas la lista de listas resultante y obtienes el resultado deseado:

[1, a, 2, b, 3, c, 4, 5]

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda