2011-02-03 41 views
17

Kết hợp trên trang này. Trong Grails có vẻ như ta không thể định nghĩa một sắp xếp mặc định trên nhiều cột trong ánh xạ miền một ánh xạ la = {sort 'prop1 desc, prop2 asc'}, hoặc {sort ([prop1: 'desc', prop2: 'asc']) }. Chỉ cột đầu tiên được sắp xếp, lame.Sắp xếp bản đồ Grails trên nhiều trường :: Groovy sắp xếp trên nhiều mục nhập bản đồ

Tương tự, khi cố gắng để Groovy sắp xếp truy vấn findAllBy Grails trên nhiều cột, sắp xếp thứ hai sẽ ghi đè đầu tiên.

danh sách def = [[ROWNUM: 2, các mục: 3], [ROWNUM: 1, số các mục: 2], [ROWNUM: 3, vị trí: 1]]

list.sort {it.rowNum} .sort {it.position}

Rõ ràng là thiếu thuyền trong trường hợp thứ hai, loại hấp dẫn. Tôi đã thấy đăng lại: thực hiện so sánh, nhưng tìm kiếm một cái gì đó ngắn gọn hơn nếu có thể.

+0

Có một yêu cầu cũ nhưng chưa được giải quyết cho việc này: http://jira.grails.org/browse/GRAILS-5306 – GreenGiant

Trả lời

30

Đây là giải pháp Groovy. Tuy nhiên về cơ bản thực hiện một Comparator mặc dù.

list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position } 
+1

vừa thấy chưa được kiểm tra trong bảng điều khiển - điều này sẽ đạt được giống như HQL tìm ("từ SomeDomain là thứ tự s theo rowNum asc, vị trí desc")? – virtualeyes

+0

Ngon; -) xác nhận nó hoạt động; 1-liner là hoàn toàn tốt đẹp. Sẽ rất tuyệt nếu chúng ta có thể làm ở cấp bản đồ trong grails, nhưng điều đó có thể phải chờ 1,4 và mới ngủ đông. Cảm ơn Peter! – virtualeyes

+1

Combinatino của tàu vũ trụ và nhà khai thác Elvis làm cho nó siêu sạch – wrschneider

0

Bạn có thể sử dụng String.format nếu bạn biết độ dài tối đa. Tôi giả định tối đa 10 chiều dài:

list.sort { String.format('%010d%010d', it.rowNum, it.position) } 
+0

Cảm ơn, tôi rời Grails không lâu sau khi gửi bài (4 năm trước), có thể giúp người khác mặc dù ;-) – virtualeyes

4

Nhờ liên kết từ GreenGiant, chúng tôi thấy rằng sự cố được đóng như cố định ở phiên bản 2.3.

Ngoài ra còn có mã ví dụ:

static mapping = 
    { sort([lastname:'asc', name:'asc']) } 

Nó đang làm việc cho tôi trong 2.4.3

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