Какой эффективный способ добавить элемент через регулярные промежутки времени - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть список собак, и мне нужно добавить объект Cat на 2-й позиции между каждыми 6 собаками. Какой эффективный способ сделать это?

fun main(args: Array<String>) {
    insertCatBetweenDogs()
}

fun insertCatBetweenDogs() {
     val dogs = mutableListOf<String>()
        for (i in 1..14) {
            dogs.add("Dog$i")
        }
        val chunkedDogs = dogs.chunked(6)
        val dogsWithcat = mutableListOf<String>()
        chunkedDogs.map { sixDogs ->
            sixDogs.mapIndexed { index, chunkedDog ->
                if (index!= 0 && index / 2 == 0) {
                    dogsWithcat.add("Cat")
                }

                dogsWithcat.add(chunkedDog)
            }
        }

        dogsWithcat.mapIndexed { i, it ->
            println(it) 
            if ((i+1) % 7 == 0) {
                println("______________")
                println("")
            }
        }
}

OutPut:

Dog1 Cat Dog2 Dog3 Dog4 Dog5 Dog6
______________

Dog7 Cat Dog8 Dog9 Dog10 Dog11 Dog12
______________

Dog13 Cat Dog14

1 Ответ

3 голосов
/ 04 апреля 2020

Это будет сделано

interface Animal
data class Dog(val name: String) : Animal
data class Cat(val name: String) : Animal

val dogs: List<Animal> = List(20) { Dog(it.toString()) }
val cats: List<Animal> = List(4) { Cat(it.toString()) }
val result = dogs
    .chunked(6)
    .mapIndexed { index, dogs -> dogs.toMutableList().apply { add(1, cats[index]) } }
    .flatten()

Это печатает

[Dog(name=0), Cat(name=0), Dog(name=1), Dog(name=2), Dog(name=3), Dog(name=4), Dog(name=5), Dog(name=6), Cat(name=1), Dog(name=7), Dog(name=8), Dog(name=9), Dog(name=10), Dog(name=11), Dog(name=12), Cat(name=2), Dog(name=13), Dog(name=14), Dog(name=15), Dog(name=16), Dog(name=17), Dog(name=18), Cat(name=3), Dog(name=19)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...