2012-04-12 3 views
5

J'essaie de trier une carte dans Groovy qui a des cartes comme valeur. Je veux parcourir la carte et imprimer les valeurs triées par les valeurs lastName et firstName. Ainsi, dans l'exemple suivant:Tri des cartes dans les cartes par valeur

def m = 
[1:[firstName:'John', lastName:'Smith', email:'[email protected]'], 
2:[firstName:'Amy', lastName:'Madigan', email:'[email protected]'], 
3:[firstName:'Lucy', lastName:'B',  email:'[email protected]'], 
4:[firstName:'Ella', lastName:'B',  email:'[email protected]'], 
5:[firstName:'Pete', lastName:'Dog', email:'[email protected]']] 

les résultats souhaités seraient:

[firstName:'Ella', lastName:'B',  email:'[email protected]'] 
[firstName:'Lucy', lastName:'B',  email:'[email protected]'] 
[firstName:'Pete', lastName:'Dog', email:'[email protected]'] 
[firstName:'Amy', lastName:'Madigan', email:'[email protected]'] 
[firstName:'John', lastName:'Smith', email:'[email protected]'] 

J'ai essayé m.sort {it.value.lastName & & it.value.firstName} et m. sort {[it.value.lastName, it.value.firstName]}. Le tri par m.sort {it.value.lastName} fonctionne mais ne fait pas le tri par firstName.

Quelqu'un peut-il aider avec cela, très apprécié, merci!

+0

Je pense que c'est un double de [cette autre question] (http://stackoverflow.com/q/9559309/581845). Pourrions-nous les marquer comme doublons et peut-être les fusionner sous un titre plus général et descriptif? – epidemian

Répondre

4

Cela devrait le faire:

m.values().sort { a, b -> 
    a.lastName <=> b.lastName ?: a.firstName <=> b.firstName 
} 
+0

Parfait, merci. A travaillé comme un champion! –