首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果存在多个相同类型的lambda,如何返回特定的lambda?(KOTLIN)

在Kotlin中,lambda是一种匿名函数,可以作为参数传递给其他函数或存储在变量中。如果存在多个相同类型的lambda,可以使用以下方法返回特定的lambda:

  1. 使用标签(label):可以在lambda表达式前面添加一个标签,然后在需要返回特定lambda的地方使用该标签。示例代码如下:
代码语言:txt
复制
val lambda1: (Int) -> Int = { x -> x * 2 }
val lambda2: (Int) -> Int = { x -> x * x }

fun returnSpecificLambda(label: String): (Int) -> Int {
    return when (label) {
        "lambda1" -> lambda1
        "lambda2" -> lambda2
        else -> throw IllegalArgumentException("Invalid label")
    }
}

val specificLambda = returnSpecificLambda("lambda1")
val result = specificLambda(5) // 使用特定的lambda进行计算
  1. 使用函数类型参数:可以将lambda作为函数的参数传递,并在函数内部根据需要返回特定的lambda。示例代码如下:
代码语言:txt
复制
val lambda1: (Int) -> Int = { x -> x * 2 }
val lambda2: (Int) -> Int = { x -> x * x }

fun returnSpecificLambda(lambda: (Int) -> Int): (Int) -> Int {
    return when (lambda) {
        lambda1 -> lambda1
        lambda2 -> lambda2
        else -> throw IllegalArgumentException("Invalid lambda")
    }
}

val specificLambda = returnSpecificLambda(lambda1)
val result = specificLambda(5) // 使用特定的lambda进行计算

以上两种方法都可以根据需要返回特定的lambda。在实际应用中,可以根据具体场景选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在ASP.NET MVC中如何应用多个相同类型ValidationAttribute?

[源代码从这里下载] 一、一个自定义ValidationAttribute:RangeIfAttribute 为了演示在相同目标元素(类、属性或者字段)应用多个同类ValidationAttribute...RangeIfAttribute定义了Property和Value两个属性,分别表示被验证属性/字段所在类型另一个属性名称和相应值,只有当指定属性值与通过Value属性值相等情况下我们在真正进行验证...Employee类型Salary(表示薪水)属性上,另外一个属性Grade表示员工级别。...在HttpPostIndex操作中,如果验证成功我们将“验证成功”字样作为ModelError添加到ModelState中。...在默认情况下,AttributeTypeId返回是自身类型,所以导致应用到相同目标元素同类ValidationAttribute只能有一个。

2.1K60

with、run等函数使用教程

但是需要注意:在lambda表达式,只支持单抽象方法模型,也就是说设计接口里面只有一个抽象方法,才符合lambda表达式规则,多个回调方法不支持。 1、用Java代码实现一个接口回调。...中实现一个接口回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)。...lambda函数块block作为参数函数,调用T类型对象let函数,则该对象为函数参数。...,因为它不是以扩展形式存在。...); return this } 3、also函数inline结构分析 also函数结构实际上和let很像唯一区别就是返回不一样,let是以闭包形式返回返回函数体内最后一行值,如果最后一行为空就返回一个

45100

Kotlin学习笔记(二)-程序结构(上 )

val string =“Hello"//推导出String类型 valint=5IIInt类型 var x = getString() + 5 //String类型 函数 函数是以特定功能组织起来代码块...//这里和重载也不相同 因为val sum =fun 后面接是无方法名方法 //这里默认是调用方法 如果想调用常量方法 可以使用sum.invoke()等价于 sum()...可选参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选大括号:如果主体包含了一个语句,就不需要使用大括号。...可选返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 简单例子: // 1. 不需要参数,返回值为 5 () -> 5 // 2....println(it)//方法体内容 Unit//最后一行作为lambda返回Kotlin Unit相当于JavaVoid无返回值 } 这几个例子应该覆盖了我们会用到大部分例子类比了

61620

Kotlin 1.2 新增特性

如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 泛型方法,则编译器现在可以理解此调用 T 需要绑定到 Foo 类型。...1.2.0 版本 JVM 而且,现在允许在 lambda 中进行智能强制转换,这些局部变量只在 lambda 之前被修改: 6 目标平台:运行 Kotlin 1.2.0 版本 JVM 支持 :...弃用:数据类覆写性拷贝 当从已经具有相同签名拷贝函数类型派生数据类时,为数据类生成 copy 实现使用父类型默认函数,会导致出现与预期相反行为,如果类型没有默认参数,则在运行时失败 导致复制冲突继承已经被...不幸是,当构造函数调用参数中存在这样表达式时,一些字节码处理工具不能很好地处理这些代码。...平台类型上调用 x.equals(null) 时,如果 x 为 null,则会不正确地返回 true。从 Kotlin 1.2 开始,在平台类型空值上调用 x.equals(...)

2.8K70

Spring中国教育管理中心-Apache Cassandra Spring 数据教程十四

返回一个可能被修改实例。 在持久化之前实体。 许多存储特定参数,例如实体持久化到集合。 例 119....如果存在多个相同类型实体回调,则可能对实体回调进行排序。排序遵循最低优先级。 14.8.2.注册实体回调 EntityCallback如果 bean 在ApplicationContext....BeforeSaveCallback使用 lambda 表达式。默认情况下无序并最后调用。请注意,由 lambda 表达式实现回调不会公开类型信息,因此使用不可分配实体调用这些会影响回调吞吐量。...尚不支持通用类型参数、可变参数和数组元素可空性,但应在即将发布版本中提供。 15.3.对象映射 有关Kotlin对象如何具体化详细信息,请参阅Kotlin 支持。...如果自定义方法是可调用,则调用自定义实现方法会将 Coroutines 调用传播到实际实现方法,suspend而无需实现方法返回反应类型,例如Mono或Flux。

1.6K40

Kotlin 1.2 新增了哪些特性?

如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 泛型方法,则编译器现在可以理解此调用 T 需要绑定到 Foo 类型。...弃用:数据类覆写性拷贝 当从已经具有相同签名拷贝函数类型派生数据类时,为数据类生成 copy 实现使用父类型默认函数,会导致出现与预期相反行为,如果类型没有默认参数,则在运行时失败 导致复制冲突继承已经被...标准库 Kotlin 标准库 artifacts 及拆分包 Kotlin 标准库现在完全兼容 Java 9 模块系统,它会禁止对包进行拆分(多个 jar 包文件在同一个包中声明类)。...不幸是,当构造函数调用参数中存在这样表达式时,一些字节码处理工具不能很好地处理这些代码。...平台类型上调用 x.equals(null) 时,如果 x 为 null,则会不正确地返回 true。从 Kotlin 1.2 开始,在平台类型空值上调用 x.equals(...)

2.8K10

【码上开学】Kotlin 高阶函数、匿名函数和 Lambda 表达式

Kotlin 函数本身性质又决定了它没办法被当做一个对象。那怎么办呢?Kotlin 选择是,那就创建一个和函数具有相同功能对象。怎么创建?使用双冒号。...() // it 可以被推断出是 Int 类型 } 这个一定注意,Lambda 返回值别写 return,如果你写了,它会把这个作为它外层函数返回值来直接结束外层函数。...当然如果你就是想这么做那没问题啊,但如果你是只是想返回 Lambda,这么写就出错了。 另外因为 Lambda 是个代码块,它总能根据最后一行代码来推断出返回类型,所以它返回类型确实可以不写。...实际上,Kotlin Lambda 也是写不了返回类型,语法上就不支持。 现在我再停一下,我们想想:匿名函数和 Lambda……它们到底是什么?...简单总结一下: 在 Kotlin 里,有一类 Java 中不存在类型,叫做「函数类型」,这一类类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象有三种方式

2.1K20

那个男人再发力,原来我以前学 Lambda 都是假

Kotlin 函数本身性质又决定了它没办法被当做一个对象。那怎么办呢?Kotlin 选择是,那就创建一个和函数具有相同功能对象。怎么创建?使用双冒号。...() // it 可以被推断出是 Int 类型 } 这个一定注意,Lambda 返回值别写 return,如果你写了,它会把这个作为它外层函数返回值来直接结束外层函数。...当然如果你就是想这么做那没问题啊,但如果你是只是想返回 Lambda,这么写就出错了。 另外因为 Lambda 是个代码块,它总能根据最后一行代码来推断出返回类型,所以它返回类型确实可以不写。...实际上,Kotlin Lambda 也是写不了返回类型,语法上就不支持。 现在我再停一下,我们想想:匿名函数和 Lambda……它们到底是什么?...简单总结一下: 在 Kotlin 里,有一类 Java 中不存在类型,叫做「函数类型」,这一类类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象有三种方式

64920

Kotlin 使用高阶函数处理集合数据

本文将介绍如何使用 Kotlin 高阶函数,如sumBy, reduce, fold, map,filter,forEach 等,来应对常见集合数据处理场景。...遍历求值 reduce sumBy有一点不好,他只能求和,而且只接受Int和Double两种类型值(sumBy:不然我起这个名字干嘛?)。如果我们要得到一个更复杂逻辑结果呢?...JavaScript reduce 函数就是 Kotlin fold 函数。u1s1,Kotlin reduce 函数挺危险,还有类型限制,不建议使用。...map逻辑也很简单,它回返回一个和调用者大小相同列表,具体元素值为 lambda 执行结果。...Kotlin 官方提供了数十个高阶函数,但其实掌握了以上几个高阶函数,基本可以 cover 所有场景了。其他只是写简洁还是写复杂一点区别。而且你还有另一条路可以走:自己写一个特定高阶函数。

2.5K10

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

返回类型 是 void ; Kotlin 语言 中 没有返回函数 其返回类型是 Unit , 该函数又称为 Unit 函数 ; Kotlin 语言中 推出 Unit 类型概念 , 是为了 兼容...泛型 概念 , 如果 函数没有返回值 , 就可以 忽略该类型 , 返回 void , 但是在 泛型 概念中 , 必须有一个确定 类型 , 因此这里引入 Unit 类型 ; 代码示例 : 在下面代码...hello() 函数返回类型是 Unit 类型 , 如果打印该返回值 , 打印结果为 kotlin.Unit ; fun main() { println(hello()) } fun...---- 匿名函数 可以作为 变量 赋值给 函数类型变量 , 可以作为 函数参数 传递给函数 , 因此 , 匿名函数 与 变量 一样 , 也存在 对应 函数类型 ; 函数类型 由 参数 和 返回值...决定 ; 有 相同 参数顺序 , 参数个数 和 返回类型 函数 , 其 函数类型相同 ; 如上个章节 , 扩展函数 CharSequence.count 接收匿名函数参数 predicate ,

1.8K20

kotlin基础--匿名函数、闭包

上篇介绍了kotlin基本类型,变量定义、函数定义等,接下来来学习如何使用匿名函数、lambda、闭包,这将大大提高我们使用kotlin编写代码效率,相对于Java繁琐代码,你会爱上这种简洁 一....print(count) } 结果: 4 {}内代表了实例化匿名函数 2.函数类型和隐式返回 kotlin中函数可以直接赋值给变量,类似于c/c++中函数指针,而Java我们需要定义接口...(String) -> String = { "我是一个函数类型变量:$it" } println(funcp("张三函数,这是it变量")) } 5.类型推断 和变量类型推断相同...会以实例化对象存在,虚拟机会为此分配内存,为了解决这种额外内存开销,kotlin有一种优化机制叫"内联",内联实际上就是在编译时会把代码复制一份替换lambda 使用方法:inline关键字 inline...kotlinlambda就是闭包 能接受函数或返回函数函数叫作高级函数,它们广泛运用于函数式编程中 fun main() { val p = printCalc() println

68010

聊聊Kotlinlambda

聊聊Kotlinlambda 本质 kotlinlambda使用创建类和调用类实现。...中方法体 block.invoke(); var1 = "end block"; System.out.println(var1); } 缺点 这种方法如果放在多个中间操作符使用...java是运行时替换,我们直接编译期间就替换了,一样效果,而且kotlin把替换操作提前到编译期性能还会好一点 好了,说完上面的思路原理,我们再来看Kotlin如何使用这种方法呢?...内联特点 非局部返回 非局部返回:顾名思义全局针对不是当前方法体 return只作用于当前函数体。 1.如果lambda中写return编译会报错,lambda中不允许写return关键字。...java和kotlin一样都是在运行时类型擦除所有我们无法获取到泛型具体类型

1.2K20

Kotlin 1.4-M1 现已发布!

lambda 中最后一个表达式智能转换 在 Kotlin 1.3 中,lambda最后一个表达式不是智能转换,除非您指定预期类型。...推断为 result 变量类型: 在 Kotlin 1.4 中,借助新推理算法,lambda最后一个表达式可以实现智能转换,并且这种更精确类型用于推断结果 lambda 类型。...在以下示例中,可以将 String 类型 @Foo 注解发出到字节码,然后由库代码使用: 有关如何在字节码中发出类型注解详细信息,请参阅 Kotlin 1.3.70 版本博文相关部分。...如果您有多个包含相同名称和不同签名函数,在 Kotlin 1.4 中调用函数可能会与在 Kotlin 1.3 中选择函数不同。...不过,如果您想通过泛型编写棘手代码,并具有不同级别的多个重载,请加以注意。所有这些情况都会列在上述兼容性指南中。 预发布说明 请注意,后向兼容性保证不涵盖预发布版本。

3.4K20

重学 Kotlin —— inline,包治百病性能良药?

然而问题关键并不是如何使用 inline ,而是什么时候使用 inline ? 既然 Kotlin 提供了内联,它肯定是为了性能优化而存在,那么,它又真的是包治百病性能良药吗?...目录 inline 本质 建议我不要用 inline ? Java 支持内联吗? 拯救 Lambda Java 是如何优化 Lambda ? 不想内联怎么办? 如何Lambda 返回?...既然 JVM 已经支持内联优化,Kotlin 内联存在意义是什么 ? 答案就是 Lambda 。...Java 是如何优化 Lambda ? 既然 Kotlin Lambda 存在性能问题,那旁边 Java 大兄弟肯定也逃脱不了。...如何Lambda 返回? 首先,普通 lambda 是不允许直接使用 return

72720

Kotlin 揭秘:理解并速记 Lambda 语法

如果是,则保存元素和值。最后,它返回它找到最大元素。相当简单。 然而 selector,看起来很整洁,它必须是允许我们在上面使用 it.pageCount 东西,所以让我们再看看它。...即使只是在这一行中,甚至还有相当多语法糖。在这种情况下,对于 selector: (T) -> R 来说是一个带有单个参数 T 函数,并返回一些类型 R 相关返回值。...如果 R 不是 Comparable,我们不能做 if(maxValue <value)。 接下来问题是,我们如何从那开始,到我们开始一个循环?让我们逐步完成整个过程。...我们看到 Kotlin 如何使用[FunctionN](#full) lambda 接口,以及如何lambda 表达式移到函数参数列表之外。...如果发现译文存在错误或其他需要改进地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头 本文永久链接 即为本文在 GitHub 上 MarkDown 链接。

64900

Kotlin Primer·第四章·Kotlin 类特性(下)

,它接受一个 String 类型参数,并返回一个 String 类型值。...您可以使用 Nothing 来表示“永远不存在值”. 5.2 复杂特性 5.2.1 嵌套函数 Kotlin 函数有一些非常有意思特性,比如函数中再声明函数。...Kotlin Lambda表达式更“纯粹”一点, 因为它是真正把Lambda抽象为了一种类型,而 Java 8 Lambda 只是单方法匿名接口实现语法糖罢了。...首先声明了一个名为printMsg Lambda,它接受一个 String 类型值作为参数,然后在 main 函数中调用它。如果还想省略,你还可以在调用时直接省略invoke,像函数一样使用。...当有多个用不到参数时,可以用下划线来替代参数名(1.1以后特性),但是如果已经用下划线来省略参数时,是不能使用 it 来替代当前参数

45820

Kotlin for Java Developers 学习笔记

> b) a else b void 类型函数在 Kotlin 中会以 Unit 形式返回 Kotlin 函数可以定义在任何地方:顶层、类成员、函数中定义另一个函数 调用顶层函数相当于 Java...来简化访问,如果对象为 null,则运行结果为 null,返回类型是 nullable 基本类型 val length: Int? = s?....,如果存在则为 null,等价于将谓词条件作为参数 first 或者 firstOrNull count 计算列表中满足谓词条件元素个数 partition 按是否满足谓词条件,将列表分裂为 2...Lambda 表达式,如果需要多个方法,那可以使用对象表达式) 对象表达式不是单例,每一次调用都会新建新实例,因为有可能会需要使用外部类传递进来参数,使用每一次都要实例化 Kotlin 中没有...} } // class Examplekt$main$1 像 filter 这样函数,都是内联 但 inline 是 Kotlin 特性,如果从 Java 调用,那不会有内联 序列 Lambda

1.8K10

Kotlin修炼指南(二):lambda表达式精髓

lambda基本形式 lambda表达式有三大特征: lambda表达式存在于{}中 参数及参数类型(可省略)在->左边 函数体在->右边 lambda表达式返回值总是返回函数体内部最后一行表达式值...println("hello kotlin") } 有参数 完整表达方式: val 函数名 : (参数1类型, 参数2类型, ...) -> 返回类型 = { 参数1, 参数2, ... -> 函数体...中调用高阶函数时,如果最后一个参数为lambda表达式,可以将lambda表达式写在外面,而且如果没有其它参数的话,小括号也是可以省略。...在Kotlin中实现相同功能,只需要使用函数参数即可。...普通lambda表达式:{ () -> R } 即函数无入参,返回值为R类型。 带接收者lambda表达式:{ T.() -> R } 即申明一个T类型接收者对象,且无入参,返回值为R类型

1.7K20
领券