Kotlin功能参考



records为流/集合和extract函数,将数据转换为该集合的元素。

科特林有办法写

records.map {extract(it)} 

无明确应用(it)

例如。records.map(extract)records.map {extract}

  • 如果extract是某些TR的功能类型(T) -> RT.() -> 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 ,如果extractSomeClass的成员或扩展功能,则可以接受一个参数,您可以使用某些接收器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

最新更新