令records
为流/集合和extract
函数,将数据转换为该集合的元素。
科特林有办法写
records.map {extract(it)}
无明确应用(it)
?
例如。records.map(extract)
或records.map {extract}
-
如果
extract
是某些T
和R
的功能类型(T) -> R
或T.() -> R
的值(本地变量,属性,参数),那么您可以将其直接传递给map
:records.map(extract)
示例:
val upperCaseReverse: (String) -> String = { it.toUpperCase().reversed() } listOf("abc", "xyz").map(upperCaseReverse) // [CBA, ZYX]
-
如果
extract
是顶级单个参数函数或本地单个参数函数,则可以将函数引用为::extract
并将其传递给map
:records.map(::extract)
示例:
fun rotate(s: String) = s.drop(1) + s.first() listOf("abc", "xyz").map(::rotate) // [bca, yzx]
-
如果它是
SomeClass
类的成员或扩展功能,不接受SomeClass
的参数或属性,则可以将其用作SomeClass::extract
。在这种情况下,records
应包含SomeType
的项目,该项目将用作extract
的接收器。records.map(SomeClass::extract)
示例:
fun Int.rem2() = this % 2 listOf("abc", "defg").map(String::length).map(Int::rem2) // [1, 0]
-
由于Kotlin 1.1 ,如果
进行绑定的可呼叫参考。extract
是SomeClass
的成员或扩展功能,则可以接受一个参数,您可以使用某些接收器foo
:records.map(foo::extract) records.map(this::extract) // to call on `this` receiver
示例:
listOf("abc", "xyz").map("prefix"::plus) // [prefixabc, prefixxyz]
(上面所有代码样本的可运行演示)
您可以使用方法参考(类似于Java)。
records.map {::extract}
查看Kotlin Docs上的功能参考示例https://kotlinlang.org/docs/reference/reflection.html#function-references