Bitwise DEVS
Bitwise DEVS

Reputation: 3449

Kotlin: Idomatic way to get items from list after a given index

Supposed I have a list that has 30 items and the given index is 9, I need to get the items starting index 10 to 19.

Currently doing it in a Java style.

                val newsList: ArrayList<Model> = arrayListOf()

                    // Get all items starting next to the current selected item
                    for (i in (position + 1) until originalList.size) {

                        // Limit the amount of item to avoid any possible OOM
                        if (newsList.size < 10)
                            newsList.add(list[i])

                    }

Upvotes: 3

Views: 3349

Answers (1)

cactustictacs
cactustictacs

Reputation: 19544

You can use drop and take for this kind of thing

val items = List(30) { i -> "Item ${i+1}"}
items.drop(10).take(10).run(::println)

>> [Item 11, Item 12, Item 13, Item 14, Item 15, Item 16, Item 17, Item 18, Item 19, Item 20]

Also you don't need to worry about how many items are in the collection - if you did drop(69) you'd just end up with an empty list. If you did listOf(1, 2).take(3) you'd just get [1, 2]. They work like "drop/take at most" - you'll only get an error if you use a negative count

Upvotes: 5

Related Questions