Группируйте номера в разные диапазоны - PullRequest
1 голос
/ 09 мая 2020

Я новичок в Kotlin и пытаюсь решить какую-то проблему. У меня есть список со следующим объектом:

data class Route(duration: Int)

Я хочу создать карту, которая сгруппирует эти поездки в соответствии с диапазоном продолжительности (например, 0-9 - это одна группа, 10-19 - следующие , 20-29 и так далее ...)

например, результатом этого списка:

listOf(Route(5), Route(7), Route(31))

должна быть следующая карта:

0..9 to listOf(Route(5), Route(7))
30..39 to listOf(Route(31))

Я искал и увидел, что могу поместить диапазон в groupBy - однако это постоянный диапазон. как сгруппировать по разным диапазонам?

1 Ответ

2 голосов
/ 09 мая 2020

Для этого вы можете использовать функцию groupBy.

fun createRangeOfTen(number: Int): IntRange {
    val trunc = number / 10
    val lowerBound = trunc * 10
    val upperBound = lowerBound + 9

    return lowerBound..upperBound
}

val list = listOf(
    Route(5), Route(7), Route(31)
)
val map = list.groupBy({ createRangeOfTen(it.duration) }, { it })
println(map)
// {0..9=[Route(duration=5), Route(duration=7)], 30..39=[Route(duration=31)]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...