2012-01-27 2 views
0

に以下のリストのリストを並べ替えるか、私はこのどのように私はグルーヴィー

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つありません) また、日付の時間部分を削除したいと思います。 おかげ

+0

実際のデータは何ですかタイプ?その日付ですか? –

答えて

1

は、代わりに示す無効な即時の、それらが実際にある日付と仮定すると、リストをソートするに:

sorted = udbmslList.sort { it[1] } 

使用SimpleDateFormatやGroovyのDate拡張時間を削除しないように。 udbmslList.sort { it[1] }を使用し、あなたのリストを並べ替えるには

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

:同じ構造の配列を作成しますが(いくつかの偽のデータを使用して)、日付のみの文字列要素とする

時間を表示せずに日付を表​​示するには、udbmslList.each { println it[1].format('yyyy-MM-dd') }のようなものを使用します。

0

日付が文字列であると仮定すると、日付はyyyy-MM-dd形式であるように見えるので、それらは辞書編集でソートすることができます。

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オブジェクトである場合は、最初のデートでリストをソートして、appropiate形式でマップにそれを変換することができます:

def result = udbmslList.sort { it[1] } 
         .collectEntries { [(it[0]): it[1].format('yyyy-MM-dd')] } 
+0

あなたがこのリストを処理するのを助けることができれば素晴らしいでしょう...私の次の質問を参照してください.. –

関連する問題