2012-04-12 24 views
5

Sto cercando di ordinare una mappa in Groovy con mappe come valore. Voglio eseguire un'iterazione sulla mappa e stampare i valori ordinati per i valori lastName e firstName. Quindi, nel seguente esempio:Ordinamento delle mappe all'interno delle mappe in base al valore

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

i risultati desiderati sarebbero: m.sort

[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]'] 

Ho provato {it.value.lastName & & it.value.firstName} e m. ordina {[it.value.lastName, it.value.firstName]}. L'ordinamento per m.sort {it.value.lastName} funziona ma non ordina per firstName.

Qualcuno può aiutare con questo, molto apprezzato, grazie!

+0

Credo che questo sia un duplicato di [quest'altra domanda] (http://stackoverflow.com/q/9559309/581845). Potremmo contrassegnarli come duplicati e magari unirli sotto un titolo più generale e descrittivo? – epidemian

risposta

4

Questo dovrebbe farlo:

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

Perfetto, grazie. Ha funzionato come un campione! –