Kotlin技术问询:如何过滤列表中小于首个元素的元素?
Kotlin链式调用中基于列表首元素过滤的解决方案
你可以借助Kotlin的作用域函数在链式调用里直接获取列表的首元素,无需额外保存列表引用,以下是几种实用实现方式:
基础实现(假设列表非空)
用run函数将列表作为上下文对象,在filter中直接调用first()获取首元素进行比较:
val result = listOf(3, 5, 2, 7, 1, 0, 9) .run { filter { it >= first() } } // 输出结果:[3, 5, 7, 9]
空安全版本
如果需要处理列表为空的情况,用firstOrNull()避免抛出异常:
val result = listOf(3, 5, 2, 7, 1, 0, 9) .run { val firstElement = firstOrNull() ?: return@run emptyList() filter { it >= firstElement } }
当列表为空时,会直接返回空列表,不会触发NoSuchElementException。
用let实现的替代写法
如果你更习惯通过参数引用对象,也可以用let:
val result = listOf(3, 5, 2, 7, 1, 0, 9) .let { list -> list.filter { it >= list.first() } }
内容的提问来源于stack exchange,提问作者Nic Wilson
相关产品推荐
相关产品推荐

