2012-04-12 45 views
5

Tôi đang cố sắp xếp bản đồ trong Groovy có bản đồ là giá trị. Tôi muốn lặp lại trên bản đồ và in ra các giá trị được sắp xếp theo giá trị lastName và firstName. Vì vậy, trong ví dụ sau:Sắp xếp bản đồ trong bản đồ theo giá trị

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

kết quả mong muốn sẽ là:

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

Tôi đã thử m.sort {it.value.lastName & & it.value.firstName} và m. sắp xếp {[it.value.lastName, it.value.firstName]}. Sắp xếp theo m.sort {it.value.lastName} hoạt động nhưng không sắp xếp theo firstName.

Ai đó có thể trợ giúp điều này, cảm ơn nhiều!

+0

Tôi nghĩ rằng đây là một bản sao của [câu hỏi khác này] (http://stackoverflow.com/q/9559309/581845). Chúng tôi có thể đánh dấu chúng là trùng lặp và có thể hợp nhất chúng dưới tiêu đề tổng quát và mô tả hơn không? – epidemian

Trả lời

4

này nên làm điều đó:

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

Hoàn hảo, cảm ơn. Làm việc như một nhà vô địch! –

Các vấn đề liên quan