2012-04-12 17 views
5

Próbuję posortować mapę w Groovy, która ma mapy jako wartość. Chcę wykonać iterację na mapie i wydrukować wartości posortowane według wartości lastName i firstName. Tak więc w poniższym przykładzie:Sortowanie map na mapach według wartości

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

żądane wyniki byłyby:

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

Próbowałem m.sort {it.value.lastName & & it.value.firstName} i m. sort {[it.value.lastName, it.value.firstName]}. Sortowanie według m.sort {it.value.lastName} działa, ale nie sortuje według firstName.

Czy ktoś może pomóc w tym, bardzo doceniane, dzięki!

+0

myślę, że to jest duplikatem tej drugiej [Pytanie] (http://stackoverflow.com/q/9559309/581845). Czy możemy oznaczyć je jako duplikaty i ewentualnie połączyć je pod bardziej ogólnym i opisowym tytułem? – epidemian

Odpowiedz

4

ten powinien zrobić:

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

Doskonale, dzięki. Pracował jak mistrz! –

Powiązane problemy