如何在Kotlin中压缩列表并跳过下一个?

时间:2018-11-14 06:58:08

标签: java kotlin

我希望像这样的列表 [1,2,3,4,5] 应该是[(1,2),(3,4),(5,0 or null)]

我应该在Kotlin或Java中使用什么操作。

我尝试了zipWithNext,它将是[(1,2),(2,3),(3,4),(4,5)]

3 个答案:

答案 0 :(得分:2)

chunked是与此最接近的标准库函数:

val list = listOf(1, 2, 3, 4, 5)
list.chunked(2) // [[1, 2], [3, 4], [5]]

如果在最后一个块中需要0null,则在调用此函数之前,请相应地填充列表:

val list = listOf(1, 2, 3, 4, 5)

val paddedList = if (list.size % 2 == 0) list else (list + 0) // [1, 2, 3, 4, 5, 0]

paddedList.chunked(2) // [[1, 2], [3, 4], [5, 0]]

答案 1 :(得分:1)

您还可以使用以下功能: list.windowed(2,2,true)

窗口是更灵活的功能, 看看:

val list = listOf(1, 2, 3, 4, 5)
list.windowed(2, 2, true) {
    if (it.size % 2 != 0) listOf(it.first(), null) else it.toList()
} // [[1, 2], [3, 4], [5, null]]

答案 2 :(得分:0)

您也可以这样:

val list = listOf(1, 2, 3, 4, 5)
with(list.windowed(2, 2, true))
{
    var newMutableList: MutableList<List<Int>> =
        ArrayList(0)
    if (size > 0 && size % 2 != 0) {
        newMutableList = this.toMutableList()
        newMutableList[newMutableList.lastIndex] += listOf(0)
    }

    if (newMutableList.isEmpty()) this else newMutableList
}