5

値としてマップを持つGroovyでマップをソートしようとしています。マップを反復処理し、lastName と firstName の値で並べ替えられた値を出力したいと考えています。したがって、次の例では:

def m = 
[1:[firstName:'John', lastName:'Smith', email:'john@john.com'], 
2:[firstName:'Amy',  lastName:'Madigan', email:'amy@amy.com'], 
3:[firstName:'Lucy', lastName:'B',      email:'lucy@lucy.com'], 
4:[firstName:'Ella', lastName:'B',      email:'ella@ella.com'], 
5:[firstName:'Pete', lastName:'Dog',    email:'pete@dog.com']]

望ましい結果は次のようになります。

[firstName:'Ella', lastName:'B',      email:'ella@ella.com']
[firstName:'Lucy', lastName:'B',      email:'lucy@lucy.com']
[firstName:'Pete', lastName:'Dog',    email:'pete@dog.com']
[firstName:'Amy',  lastName:'Madigan', email:'amy@amy.com']
[firstName:'John', lastName:'Smith', email:'john@john.com']

m.sort{it.value.lastName&&it.value.firstName} と m.sort{[it.value.lastName, it.value.firstName]} を試しました。m.sort{it.value.lastName} による並べ替えは機能しますが、firstName による並べ替えはできません。

誰でもこれを手伝ってくれますか?

4

1 に答える 1

4

これはそれを行う必要があります:

m.values().sort { a, b ->
  a.lastName <=> b.lastName ?: a.firstName <=> b.firstName
}
于 2012-04-12T21:10:23.677 に答える