更改列表以在Kotlin中映射,同时自定义此转换

Ali*_*Urz 3 java functional-programming kotlin

var listOfNums = listOf(1,9,8,25,5,44,7,95,9,10)
var mapOfNums = listOfNums.map { it to it+1 }.toMap()
println(mapOfNums)
Run Code Online (Sandbox Code Playgroud)

结果

{1=2, 9=10, 8=9, 25=26, 5=6, 44=45, 7=8, 95=96, 10=11}
Run Code Online (Sandbox Code Playgroud)

虽然我需要这个结果,但是当我需要将当前元素映射到下一个元素时,它会将下一个元素的内容添加到当前元素

我的目标结果

{1=9, 8=25, 5=44, 7=59, 9=10}
Run Code Online (Sandbox Code Playgroud)

mar*_*ran 6

对于Kotlin 1.1:

首先,使用zip创建一个包含相邻对的列表.然后你把所有其他一对丢弃,然后再转换为Map.像这样:

val list = listOf(1,9,8,25,5,44,7,95,9,10)
val mapOfNums = list.zip(list.drop(1))
                    .filterIndexed { index, pair -> index % 2 == 0 }
                    .toMap())
Run Code Online (Sandbox Code Playgroud)

对于Kotlin 1.2:

Kotlin 1.2带来的chunked功能将使这更容易一些.此函数将列表分为给定长度的子列表.然后你可以这样做:

val list = listOf(1,9,8,25,5,44,7,95,9,10)
val mapOfNums = list.chunked(2).associate { (a, b) -> a to b }
Run Code Online (Sandbox Code Playgroud)

  • 另外:`list.chunked(2).associate {(a,b) - > a到b}` (3认同)