2014-04-02 40 views
2

我已經根據名稱對數據進行了排序。但是當我要在「日期」的基礎上對哈希映射ArrayList的數據進行排序時,我不知道如何解決它。我的名字排序方法如下。如何根據日期對基於日期的hashmap <String,String>的ArrayList的數據進行排序

protected ArrayList<HashMap<String, String>> setListOrderByName(ArrayList<HashMap<String, String>> menuItems2) { 

    Collections.sort(menuItems2, new Comparator<HashMap<String, String>>() { 
     public int compare(HashMap<String, String> mapping1, 
       HashMap<String, String> mapping2) { 
      return mapping1.get(KEY_NAME).compareTo(mapping2.get(KEY_NAME)); 
     } 
    }); 

    return menuItems2; 
} 

我已經收到來自XML解析的數據。我們以字符串格式獲取姓名,日期,時間等。

+0

你沒有一個「約會」那裏......只是' 'Map '的列表。 –

+0

是字符串格式的日期 – loknath

+0

如果它是以字符串形式存儲的日期,最簡單的方法是將字符串轉換爲日期,然後進行比較。 – bitkot

回答

6

字符串轉換爲日期,然後基於字符串日期進行比較

protected ArrayList<HashMap<String, String>>  
setListOrderByName(ArrayList<HashMap<String, String>> menuItems2) { 

Collections.sort(menuItems2, new Comparator<HashMap<String, String>>() { 
DateFormat f = new SimpleDateFormat("dd/MM/yyyy '@'hh:mm a");//do determ  

@Override 
public int compare(HashMap<String, String> mapping1, 
    HashMap<String, String> mapping2) { 
try { 
    return f.parse(mapping1.get(KEY_NAME)).compareTo(f.parse(mapping2.get(KEY_NAME))); 
} catch (ParseException e) { 
    throw new IllegalArgumentException(e); 
} 
} 
}); 
return menuItem2; 
} 
+0

這是一個非常具體的日期格式。你是如何確定的? –

+0

@ElliottFrisch來確定字符串格式訪問http://stackoverflow.com/questions/7579227/how-to-get-the-given-date-string-formatpattern-in-java – loknath

2

這裏例如對於排序的HashMap

protected ArrayList<HashMap<String, String>> setListOrderByName(ArrayList<HashMap<String, String>> menuItems2) { 

     Collections.sort(menuItems2, new Comparator<HashMap<String, String>>() { 
      public int compare(HashMap<String, String> mapping1, 
        HashMap<String, String> mapping2) { 

       DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
       Date date1 = formatter.parse(mapping1.get(DATE)); 


       DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
       Date date2 = formatter.parse(mapping2.get(DATE)); 

       if(date1.after(date2)){ 
       return mapping1.get(DATE); 
       }else{ 
        return mapping2.get(DATE); 
       }       
      } 
     }); 

     return menuItems2; 
    } 
相關問題