将列表分成几部分
有一个简单的方法可以将列表分成几部分(也许是lambda)在Kotlin?
例如:
[1, 2, 3, 4, 5, 6] => [[1, 2], [3, 4], [5, 6]]
给定列表: val list = listOf(1, 2, 3, 4, 5, 6)
你可以使用groupBy
:
list.groupBy { (it + 1) / 2 }.map { it.value }
或者如果你的值不是数字,你可以先给它们分配一个索引:
list.withIndex() .groupBy { it.index / 2 } .map { it.value.map { it.value } }
或者如果你想保存一些分配,你可以使用foldIndexed手动多一点 :
list.foldIndexed(ArrayList<ArrayList<Int>>(list.size / 2)) { index, acc, item -> if (index % 2 == 0) { acc.add(ArrayList(2)) } acc.last().add(item) acc }
你可能会考虑使用Google Guava的Lists.partition(List, int)
:
Lists.partition(list, 2).map(Iterable<Int>::toList)
你也可以滚动你自己的partition
功能。 例如:
fun <T> Iterable<T>.partition(size: Int): List<List<T>> = with(iterator()) { check(size > 0) val partitions = mutableListOf<List<T>>() while (hasNext()) { val partition = mutableListOf<T>() do partition.add(next()) while (hasNext() && partition.size < size) partitions += partition } return partitions }
该API说有一个GroupBy函数,应该做你想做的。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
或者使用子列表并自行分解
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/sub-list.html