Kotlin流操作中如何在all步骤复用map的中间集合结果?
Kotlin中复用map后中间集合的实现方法
你需要在all判断中使用map操作后的完整中间集合,这里提供两种实用的实现方式:
方式一:将中间结果存入变量
直接把map的结果赋值给一个变量,后续操作就可以直接引用这个变量:
val coordinates: Array<IntArray> = arrayOf(intArrayOf(1, 2), intArrayOf(1, 3), intArrayOf(1, 4)) // 先保存map后的中间集合 val mappedCoordinates = coordinates.map { it[0] } // 使用中间集合完成all判断 val allMatchFirst = mappedCoordinates.all { it == mappedCoordinates[0] }
方式二:用run函数链式处理
如果不想额外声明变量,可以借助run函数,在其作用域内直接访问map返回的集合(即lambda中的this):
val coordinates: Array<IntArray> = arrayOf(intArrayOf(1, 2), intArrayOf(1, 3), intArrayOf(1, 4)) val allMatchFirst = coordinates.map { it[0] }.run { // this指向map后的集合,first()等价于this[0] all { it == first() } }
空集合兼容处理(可选)
如果coordinates可能为空,建议用firstOrNull()避免抛出异常,根据业务需求调整空集合的返回逻辑:
val allMatchFirst = coordinates.map { it[0] }.run { val firstElement = firstOrNull() ?: return@run true // 空集合默认返回true,可按需修改 all { it == firstElement } }
内容的提问来源于stack exchange,提问作者asanelder
相关产品推荐
相关产品推荐

