2011年6月20日

Groovy 的 inject() method 應用

很多時候撰寫 Java 程式處理多筆資料,大多會以 Map 的型式在呈現。應用 iteration 的技巧將 DO 轉為 TO,不外乎使用 for / while loop。

而在 Groovy 的領域,則可以使用 inject() method; HA.KI blog 中先展現了 inject() 在數值加總的應用外,又示範將 List 物件轉為 Map 的技巧:
def persons = [
    new Person(username:'mrhaki', email: 'email@host.com'),
    new Person(username:'hubert', email: 'other@host.com')
]

def map = persons.inject([:]) { result, person ->
    result[person.username] = person.email
    /*return*/ result
}
在 result 的增設上, 可以使用下列的技巧:
    result << [(person.username): person.email]

    result += [(person.username): person.email]
如此, 連最後一行的 result return 都可以省了:
def map = persons.inject([:]) { result, person ->
    result << [(person.username): person.email]
}

沒有留言: