как отсортировать список списков ниже в Groovy - PullRequest
0 голосов
/ 27 января 2012

У меня есть список списков в Groovy, как это

 udbmslList=[
           [133, 2011-11-30 00:00:00.0], 
           [141, 2011-11-29 00:00:00.0], 
           [132, 2011-11-28 00:00:00.0], 
           [11, 2011-12-03 00:00:00.0], 
           [119, 2011-12-02 00:00:00.0], 
           [182, 2011-12-01 00:00:00.0], 
           [12, 2011-12-04 00:00:00.0]
           ]

Как мне отсортировать вышеупомянутый список в один список / карту или сохранить ту же структуру (список списков) в порядке возрастаниядата (не может быть 2 одинаковые даты в списке выше) Также я хочу удалить часть времени даты.Спасибо

Ответы [ 3 ]

1 голос
/ 27 января 2012

Чтобы отсортировать список, предполагая, что это на самом деле даты, вместо показанного недействительного немедленного:

sorted = udbmslList.sort { it[1] }

Используйте SimpleDateFormat или расширения Date Groovy, чтобы не удалять время.

Чтобы создать массив с такой же структурой, но с строковым элементом только для даты (используя некоторые поддельные данные):

s = udbmslList.sort { it[1] }.collect { [it[0], it[1].format('yyyy-MM-dd')] }
=> [[141, 2012-01-26], [133, 2012-01-26], [11, 2012-01-26]]
0 голосов
/ 27 января 2012

Предполагая, что даты являются строками, так как они выглядят в формате гггг-ММ-дд, они могут быть отсортированы лексикографически.

def udbmslList=[
    [133, "2011-11-30 00:00:00.0"], 
    [141, "2011-11-29 00:00:00.0"], 
    [132, "2011-11-28 00:00:00.0"], 
    [11,  "2011-12-03 00:00:00.0"], 
    [119, "2011-12-02 00:00:00.0"], 
    [182, "2011-12-01 00:00:00.0"], 
    [12,  "2011-12-04 00:00:00.0"]
]

// Get rid of the timestamp part of the date and convert into a map.
def result = udbmslList.collectEntries { 
    [(it[0]): it[1].split()[0]] 
}

// Sort by date lexicographically.
result.sort { it.value }

assert result == [
    132: "2011-11-28", 
    141: "2011-11-29", 
    133: "2011-11-30", 
    182: "2011-12-01", 
    119: "2011-12-02", 
    11: "2011-12-03", 
    12: "2011-12-04"
]

Редактировать : Если даты являются Date объектами, вы можете сначала отсортировать список по дате, а затем преобразовать его в карту в соответствующем формате:

def result = udbmslList.sort { it[1] }
                       .collectEntries { [(it[0]): it[1].format('yyyy-MM-dd')] }
0 голосов
/ 27 января 2012

Чтобы отсортировать список, используйте udbmslList.sort { it[1] }.

. Чтобы отобразить даты без времени, вы должны использовать что-то вроде udbmslList.each { println it[1].format('yyyy-MM-dd') }.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...