1. ホーム
  2. java

[解決済み] groovyでリストからMapを作成するショートカット?

2022-05-17 16:19:36

質問

何か略記が欲しいのですが。

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

が、ドキュメントには何も書かれていません...何か見落としているのでしょうか? それとも私があまりにも怠惰なだけなのでしょうか?

どのように解決するのですか?

最近、まさに「リストをマップに変換する」という必要に迫られました。この質問はGroovyバージョン1.7.9が登場する前に投稿されたものなので、メソッドは collectEntries はまだ存在していませんでした。と全く同じ働きをします。 collectMap メソッドと同じように動作します。 が提案された :

Map rowToMap(row) {
    row.columns.collectEntries{[it.name, it.val]}
}

何らかの理由で古いGroovyのバージョンに行き詰っている場合は inject メソッドを使うこともできます(提案されているように ここで ). これは、クロージャの中に一つの式だけを取り込むように少し修正したものです(単に文字数を節約するためです!)。

Map rowToMap(row) {
    row.columns.inject([:]) {map, col -> map << [(col.name): col.val]}
}

+ 演算子の代わりに << .