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

如何访问Kotlin中ArrayList<Any>内的嵌套ArrayList?

访问Kotlin中的嵌套集合

你的问题出在y的泛型类型定义为ArrayList<Any>,导致取出的元素类型是Any,而非实际的List类型,所以无法直接访问内部集合的元素。下面提供两种可行的解决方法:

方法一:使用正确的泛型类型

直接将y的泛型指定为List<Any>,这样添加的元素类型明确,无需额外转换就能直接访问内部集合:

fun main() {
    // 明确泛型为List<Any>,因为split.map返回的是List<Any>(元素可能是Int或String)
    val y = ArrayList<List<Any>>()
    for (i in 1..2){
        y.add(readln().split(' ').map {
            try {
                it.toInt()
            } catch (e: Exception) {
                it
            }
        })
    }

    // 现在可以直接访问内部集合的元素
    println(y[0][0]) // 访问第一个内部集合的第一个元素
    println(y[1][1]) // 访问第二个内部集合的第二个元素

    y.forEach { innerList ->
        innerList.forEach { element ->
            println(element)
        }
    }
}

方法二:类型安全转换(保留原ArrayList的情况)

如果因为某些原因必须使用ArrayList<Any>,可以通过类型判断和安全转换来访问内部集合:

fun main() {
    val y = ArrayList<Any>()
    for (i in 1..2){
        y.add(readln().split(' ').map {
            try {
                it.toInt()
            } catch (e: Exception) {
                it
            }
        })
    }

    // 安全转换为List<Any>后访问
    val firstInnerList = y[0] as? List<Any>
    firstInnerList?.let {
        println(it[0]) // 访问第一个元素
        it.forEach { element -> println(element) }
    }

    // 遍历外层集合时,先判断元素类型
    y.forEach { outerElement ->
        if (outerElement is List<*>) {
            outerElement.forEach { innerElement ->
                println(innerElement)
            }
        }
    }
}

补充说明

你打印y[0]::class.simpleName得到的是ArrayList,是因为Kotlin中map函数默认返回的是ArrayList(具体实现类可能因版本略有不同),但它的接口类型是List,所以用List<Any>作为泛型更符合面向接口的编程习惯。

内容的提问来源于stack exchange,提问作者Meerza Al Fardan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:18