これには誰か助けてほしいです:
Map rowToMap(row) {
def rowMap = [:];
row.columns.each{ rowMap[it.name] = it.val }
return rowMap;
}
GDK の状況を考えると、次のようなことが可能になると思います。
Map rowToMap(row) {
row.columns.collectMap{ [it.name,it.val] }
}
しかし、ドキュメントには何も記載されていません...何か見落としているのでしょうか? それとも、あまりにも怠惰なのでしょうか?
ベストアンサー1
最近、まさにそのことを行う必要性に遭遇しました。リストをマップに変換することです。この質問はGroovyバージョン1.7.9がリリースされる前に投稿されたので、collectEntries
collectMap
まだ存在していなかった。メソッドと全く同じように動作する提案された:
Map rowToMap(row) {
row.columns.collectEntries{[it.name, it.val]}
}
何らかの理由で古いGroovyバージョンを使い続ける必要がある場合は、inject
方法も使用できる(提案されているここ)。これは、クロージャ内に 1 つの式のみを取るように若干変更されたバージョンです (文字数を節約するためだけです)。
Map rowToMap(row) {
row.columns.inject([:]) {map, col -> map << [(col.name): col.val]}
}
演算子+
を の代わりに使用することもできます<<
。