gpt4 book ai didi

list - 在 Kotlin 中转换后返回第一个非空值

转载 作者:行者123 更新时间:2023-12-05 01:32:11 24 4
gpt4 key购买 nike

我想在 Kotlin 中转换元素列表后返回第一个非空值,所以像这样:

suspend fun myFunction(): Any {
val firstNonNullId = this.mapNotNull{ it.id }
?.first{ transform(id) != null }

return transform(firstNonNullID)
}

编写此函数的更好、更惯用的方法是什么?我想尽可能少地调用 transform(it) ,所讨论的转换也是一个 suspend 函数。

编辑transform() 是一个 suspend 函数时,asSequence() 解决方案会出错,因为它必须从协程体中调用。即使整个 myFunction() 是一个挂起函数,也会发生这种情况。 transformation 是 suspend function 应该怎么解决?

最佳答案

从 Kotlin 1.5 开始,您可以使用 firstNotNullOf函数或其 ...OrNull变体:

// returns the first non-null result of transform
this.firstNotNullOf { transform(it.id) }

firstNotNullOf 如果未找到转换的非空结果,则抛出异常,并且 firstNotNullOfOrNull 在这种情况下返回 null。

这两个函数都是内联的,因此当它们本身被挂起函数调用时,应该可以在它们的 lambda 参数中调用挂起函数。

关于list - 在 Kotlin 中转换后返回第一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65719649/

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