是否有一种简单的方法可以将列表分成Kotlin中的部分(可能是一些lambda)?
例如:
[1, 2, 3, 4, 5, 6] => [[1, 2], [3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)
Vas*_*sia 49
从Kotlin 1.2开始,您可以使用Iterable<T>.chunked(size: Int): List<List<T>>stdlib中的函数(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/chunked.html).
mie*_*sol 26
鉴于列表:val list = listOf(1, 2, 3, 4, 5, 6)您可以使用groupBy:
list.groupBy { (it + 1) / 2 }.map { it.value }
Run Code Online (Sandbox Code Playgroud)
或者,如果您的值不是数字,您可以先为它们分配索引:
list.withIndex()
.groupBy { it.index / 2 }
.map { it.value.map { it.value } }
Run Code Online (Sandbox Code Playgroud)
或者,如果您想保存一些分配,可以使用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
}
Run Code Online (Sandbox Code Playgroud)
gil*_*des 13
更好的答案实际上是VasyaFromRussia撰写的答案.
如果使用groupBy,则必须添加并索引,然后进行后处理从IndexedValue对象中提取值.
如果你使用chunked,你只需要写:
val list = listOf(10, 2, 3, 4, 5, 6)
val chunked = list.chunked(2)
println(chunked)
Run Code Online (Sandbox Code Playgroud)
打印出:
[[10, 2], [3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)
划分列表的好方法是使用函数partition。不像groupBy它不按键划分列表,而是按Pair<List, List>结果给出的谓词划分。
下面是一个例子:
val (favorited, rest) = posts.partition { post ->
post.isFavorited()
}
favoritedList.addAll(favorited)
postsList.addAll(rest)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11927 次 |
| 最近记录: |