2012-04-12 29 views
5

Haritaları Groovy olarak haritada haritadanse gibi sıralamak çalışıyorum. Harita üzerinde yinelemek ve lastName ve firstName değerlerine göre sıralanmış değerleri yazdırmak istiyorum. Yani aşağıdaki örnekte:Haritaları şuna göre haritalara göre sıralama

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:'pete[email protected]']] 

istenen sonuçlar şöyle olacaktır:

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

denedim m.sort {it.value.lastName & & it.value.firstName} m. sıralama {[it.value.lastName, it.value.firstName]}. M.sort {it.value.lastName} ile işleniyor ancak firstName'e göre sıralama yapılmıyor.

Herkes bu konuda yardımcı olabilir, çok minnettar, teşekkürler!

+0

Bu [bu diğer soruya] bir kopyası olduğunu düşünüyorum (http://stackoverflow.com/q/9559309/581845). Onları kopya olarak işaretleyebiliriz ve belki daha genel ve tanımlayıcı bir başlık altında birleştirebilir miyiz? – epidemian

cevap

4

Bu yapmalıyım:

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

Mükemmel, teşekkürler. Bir şampiyon gibi çalıştım! –

İlgili konular