kotlin - 如何将 Long 类型的范围与 lambda 表达式相乘

标签 kotlin

如何编写一个 lambda 表达式,它接受两个长参数作为范围边界并返回该范围内所有数字的乘法

val lambda: (Long, Long) -> Long = { x, y -> for (i in x..y) {x * y}//I don't know what to fix in this block }

最佳答案

您可以使用reduce函数,它在 O(n-1) 中执行操作:

val lambda: (Long, Long) -> Long = { x, y -> (x..y).reduce { a, b -> a*b } }

但不幸的是,如果集合中有 0 个元素或 1 个元素,它会抛出异常,所以我建议使用折叠函数,它会再进行一次迭代,即 O(n):

<罢工>
val lambda: (Long, Long) -> Long = { x, y -> (x..y).fold(1) { a, b -> a*b } }

<罢工> 它应该并且将会抛出作为 lambda(3L, 1L) 传递的元素因为没有元素,而不是 1。

关于kotlin - 如何将 Long 类型的范围与 lambda 表达式相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472657/

相关文章:

android - 协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

ssl - 击打 : SSL/TLS required by server but disabled in client

android - 如何在调用方法中检查 Kotlin 协程 job.isActive

android - 如何使用 kotlin 在 android 中初始化小部件

android - 如何在 Android 中使用 Kotlin 从 NavigationView 的 headerLayout 中指定的布局访问 View

arrays - Kotlin 中简洁的 2D 原始数组初始化

kotlin - 如何将制作人与 Actor 联系起来?

android - Android应用程序崩溃:retrofit2.HttpException:HTTP 401

android - 需要将Adapter绑定(bind)到RecyclerView两次数据才会出现

android - 在创建 ViewModelProvider 实例时将“this”和 "activity!!"作为 ViewModelStoreOwner 传递有什么区别