Groovyでリストからマップを作成するためのショートカットはありますか?質問する

Groovyでリストからマップを作成するためのショートカットはありますか?質問する

これには誰か助けてほしいです:

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がリリースされる前に投稿されたので、collectEntriescollectMapまだ存在していなかった。メソッドと全く同じように動作する提案された:

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]}
}

演算子+を の代わりに使用することもできます<<

おすすめ記事