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

Kotlin中for循环遍历数组仅返回首个值无法返回多值的问题

出错原因

你的代码存在3个核心问题,导致只能拿到第一个值:

  • 返回值类型定义错误:函数声明的返回类型是String?,属于单值类型,本身就不支持返回多个结果,和你要获取多个name的需求不匹配。
  • 循环遍历对象构造错误:val entrySize = arrayOf(batches.entries!!)这行代码是把整个entries列表作为唯一元素存入了新数组,导致这个新数组的长度永远是1,循环只会执行1次,根本没有遍历到entries里的每一个TruckEntry元素。
  • 循环内return逻辑错误:for循环第一次执行时就触发了return语句,Kotlin中return会直接终止整个函数的执行,哪怕后面还有待遍历的元素,也不会继续运行循环逻辑。
修改方案

首先根据业务需求调整返回值逻辑:如果需要获取多个name,要么把返回值改为字符串列表存储所有name,要么把多个name按规则拼接为单个字符串返回,以下是两种常见场景的实现:

场景1:返回所有name组成的列表

// 修改返回值类型为字符串列表,适配多值返回需求
private fun getBatchNames(batches: Batches): List<String?> {
    // 前置判空,entries为空时直接返回空列表,避免冗余的非空断言
    val entryList = batches.entries ?: return emptyList()
    return entryList.map { it.name }
}

场景2:拼接所有name为单个字符串返回

如果业务要求返回单个字符串,可以把所有name用分隔符拼接,entries为空时返回原有占位符:

private fun getBatchName(batches: Batches): String {
    val entryList = batches.entries
    if (entryList.isNullOrEmpty()) {
        return "****************"
    }
    // 过滤掉name为null的条目,用顿号拼接所有有效名称
    return entryList.mapNotNull { it.name }.joinToString(separator = "、")
}

补充说明:不要在已经做过空判断的位置滥用!!非空断言,容易引发空指针崩溃,Kotlin提供了空安全调用、?:空合并操作符可以更安全地处理可空类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:15:51