gpt4 book ai didi

Kotlin 短路图{}.firstOrNull{}

转载 作者:IT老高 更新时间:2023-10-28 13:46:41 33 4
gpt4 key购买 nike

我需要映射一个列表并检索第一个非空元素,并且我需要像在 Java 8 流 API 中那样短路映射操作。在 Kotlin 中是否有现成的方法可以在没有 Java 8 流的情况下执行此操作?

为此,我创建了自己的扩展方法:

fun <T, R> Iterable<T>.firstNonNullMapping(transform: (T) -> R?): R? {
for (element in this) {
val result = transform(element)
if (result != null) {
return result
}
}
return null
}

测试证明这是可行的

val firstNonNullMapping = listOf(null, 'a', 'b')
.firstNonNullMapping {
assertNotEquals(it, 'b') // Mapping should be stopped before reaching 'b'
it
}
assertEquals(firstNonNullMapping, 'a')

不过,IntelliJ 建议我将 for 循环替换为更简洁的循环

return this
.map { transform(it) }
.firstOrNull { it != null }

问题是这将映射可迭代的所有元素,这对于我的用例来说是必不可少的,即在第一个非 null 元素处停止。

最佳答案

Kotlin 懒惰地评估了 sequences对应于 Java 8 流,而不是在集合上调用 stream(),而是调用 asSequence():

return this
.asSequence()
.mapNotNull { transform(it) }
.firstOrNull()

关于Kotlin 短路图{}.firstOrNull{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631856/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com