You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中map函数处理数组未修改元素值的原因排查

为什么Kotlin的map函数没让数组元素翻倍?

嗨,这是个新手很容易踩的坑,我来给你捋明白!

问题的核心在于你对Kotlin中map函数的认知偏差:map是个无副作用的纯函数,它根本不会修改原数组,只会返回一个包含转换后元素的全新集合。你的代码里调用了someArray.map({num -> num*2}),但完全没接收这个返回的新集合,相当于白做了转换操作,原数组自然纹丝不动。

怎么修正?

你需要把map的结果存起来,或者直接替换原数组(如果不需要保留原数据的话)。

方法1:保存到新变量(推荐)

这种方式能保留原数组,更符合函数式编程的设计思想:

fun main(args : Array<String>){ 
    val someArray : Array<Int> = arrayOf(3,53,2,521,51,23,512,34,124); 
    println("Original array is ") 
    someArray.forEach { print("$it , ") } 
    // 接收map返回的List,转成Array类型(map默认返回List)
    val doubledArray = someArray.map { num -> num * 2 }.toTypedArray()
    println("\nChanged array is ") 
    doubledArray.forEach { print("$it , ") } 
}

方法2:直接替换原数组

如果不需要保留原数组,可以把原变量改成var,再将map结果赋值回去:

fun main(args : Array<String>){ 
    var someArray : Array<Int> = arrayOf(3,53,2,521,51,23,512,34,124); // 改为可变变量var
    println("Original array is ") 
    someArray.forEach { print("$it , ") } 
    // 重新赋值原数组
    someArray = someArray.map { it * 2 }.toTypedArray()
    println("\nChanged array is ") 
    someArray.forEach { print("$it , ") } 
}

额外小技巧:如果用MutableList怎么办?

如果你使用的是MutableList而非Array,还可以用replaceAll直接修改原集合,不需要创建新对象:

fun main(args : Array<String>){ 
    val someList = mutableListOf(3,53,2,521,51,23,512,34,124)
    println("Original list is ") 
    someList.forEach { print("$it , ") } 
    someList.replaceAll { it * 2 } // 直接修改原集合
    println("\nChanged list is ") 
    someList.forEach { print("$it , ") } 
}

最后再划个重点:Kotlin里的map、filter、flatMap这类集合操作函数,都是只返回新结果、不修改原集合的纯函数。必须接收它们的返回值,才能看到转换后的效果哦!

内容的提问来源于stack exchange,提问作者Dishonered

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:22:47