2017-02-21 88 views
1

考慮下面的代碼,以獲得一個不錯的列表中的所有賬號的名單我必須做到以下幾點:科特林相當於常規spead點(。*)

data class Customer(val accounts : List<Account>) 
data class Account(val number : String) 

fun getCustomers() = arrayListOf(
    Customer(
     arrayListOf(Account("1"),Account("2")) 
    ), 
    Customer(
     arrayListOf(Account("3"),Account("4")) 
    ) 
) 
fun main(args: Array<String>) { 
    // long 
    println(getCustomers().map{ it.accounts }.flatten().map{ it.number }) 
    // a little shorter (just discovered while typing the question) 
    println(getCustomers().flatMap{ it.accounts }.map{ it.number }) 

Playground Link

在Groovy中給出了相同的類結構我可以這樣做:

println(getCustomers()*.accounts*.number.flatten()) 
    // or even 
    println(getCustomers().accounts.number.flatten()) 

Playground Link

哪個更好一點。是否有可能「創建」一個運算符(比如說*)以類似於Groovy版本?

回答

2

不,不可能在Kotlin中創建新的操作員。