dev*_*ull 7 functional-programming kotlin
让records流/集合和extract函数转换数据形成这种集合的元素.
Kotlin有没有办法写作
records.map {extract(it)}
Run Code Online (Sandbox Code Playgroud)
没有明确申请(it)?
例如records.map(extract)或records.map {extract}
hot*_*key 10
如果extract是一个功能类型的值(局部变量,属性,参数)(T) -> R或T.() -> R一些T和R,然后就可以直接将它传递给map:
records.map(extract)
Run Code Online (Sandbox Code Playgroud)
例:
val upperCaseReverse: (String) -> String = { it.toUpperCase().reversed() }
listOf("abc", "xyz").map(upperCaseReverse) // [CBA, ZYX]
Run Code Online (Sandbox Code Playgroud)如果extract是顶级单参数函数或本地单参数函数,则可以将函数引用作为::extract并将其传递给map:
records.map(::extract)
Run Code Online (Sandbox Code Playgroud)
例:
fun rotate(s: String) = s.drop(1) + s.first()
listOf("abc", "xyz").map(::rotate) // [bca, yzx]
Run Code Online (Sandbox Code Playgroud)如果它是SomeClass不接受任何参数或属性的类的成员或扩展函数SomeClass,则可以将其用作SomeClass::extract.在这种情况下,records应该包含SomeType将用作接收器的项目extract.
records.map(SomeClass::extract)
Run Code Online (Sandbox Code Playgroud)
例:
fun Int.rem2() = this % 2
listOf("abc", "defg").map(String::length).map(Int::rem2) // [1, 0]
Run Code Online (Sandbox Code Playgroud)从Kotlin 1.1开始,如果extract是SomeClass接受一个参数的类的成员或扩展函数,则可以使用某个接收器创建绑定的可调用引用foo:
records.map(foo::extract)
records.map(this::extract) // to call on `this` receiver
Run Code Online (Sandbox Code Playgroud)
例:
listOf("abc", "xyz").map("prefix"::plus) // [prefixabc, prefixxyz]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |