Kotlin相当于Groovy spead-dot(*。)

时间:2017-02-21 02:24:44

标签: groovy collections kotlin

鉴于以下代码可以在一个不错的列表中获取所有帐号的列表,我必须执行以下操作:

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

哪个好一点。有可能&#34;创造&#34;一个运算符(比如*。)做类似于Groovy的版本?

1 个答案:

答案 0 :(得分:2)

不,它无法在Kotlin中创建新的运营商。