設records
是流/收集和extract
功能,其將數據形成這種集合的元素。科特林函數參照
是否有科特林的方式來寫
records.map {extract(it)}
沒有明確地將(it)
?
E.g. records.map(extract)
或records.map {extract}
設records
是流/收集和extract
功能,其將數據形成這種集合的元素。科特林函數參照
是否有科特林的方式來寫
records.map {extract(it)}
沒有明確地將(it)
?
E.g. records.map(extract)
或records.map {extract}
例子和R
,那麼你可以直接將它傳遞給map
:
records.map(extract)
實施例:
val upperCaseReverse: (String) -> String = { it.toUpperCase().reversed() }
listOf("abc", "xyz").map(upperCaseReverse) // [CBA, ZYX]
如果extract
是一個頂級單個參數功能或者本地單個參數功能,可以make a function reference as ::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]
由於科特林1。1,如果extract
是一個成員或類SomeClass
的一個擴展函數接受一個參數,可以make a bound callable reference一些接收機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}
採取如果extract
爲一些T
一個功能類型(T) -> R
或T.() -> R
的值(局部變量,屬性,參數)來看看函數引用上科特林文檔 https://kotlinlang.org/docs/reference/reflection.html#function-references
此代碼不會執行它的用途。每個'records'項目將被映射到函數引用,並且您將得到N個相同項目':: extract'的列表。 – hotkey