2013-04-28 75 views
0

我一直在尋找很多,但是我沒有找到適合我的問題的解決方案。現在我想根據int值對ArrayList<Hashmap<String,Object>>進行排序。通過int值對HashMap <String,Object>的ArrayList進行排序

HashMap<String, Object>map = new HashMap<String, Object>(); 
       map.put("friend", "x"); 
       map.put("status", "yyoyo"); 
       map.put("time", "20:10"); 
       map.put("lat", 30.030535); 
       map.put("lng", 31.506050); 
       map.put("distance", 50); 

        statusMapList.add(map); 

現在這裏是一個示例。 statusMapList擁有許多這樣的HashMap,我想根據distance的值對它們進行排序,那麼有沒有辦法做到這一點?非常感謝。

回答

1

只需寫你自己的Comparator<HashMap<String, Object>>並使用this versionCollections.sort()

+0

對不起,但我在處理比較器時遇到了很大的問題。你能幫我一個忙,給我一個例子,說明這對我有用嗎?非常感謝 – 2013-04-28 21:32:23

+1

其他兩種答案在OOP方式下可能會更好,所以如果您可以使用對象來表示數據,請這樣做。但是,如果這是您無法控制的作業,則可以在比較器類的compareTo中返回map1.get(「distance」) - map2.get(「distance」)。 – 2013-04-28 21:36:24

+1

和什麼有關以下解決方案: '公共類PositionComparator實現比較> { \t @覆蓋 \t \t公衆詮釋比較(HashMap的<字符串,對象> 01,HashMap的<字符串,對象> O2 )()()()()()()()()()()() \t} \t}' – 2013-04-28 21:41:27

2

如果我正確理解您的用例,您應該更改您的數據表示形式。

創建一個類中調用狀態實現可比

public class Status implements Comparable<Status> 
{ 
String friend; 
String status; 
String time; // Or DateTime 
double lat; 
double lng; 
double distance; 

// Override compareTo and use distance to decide the order 
// Override equals 
// Override hashcode 
} 

現在你應該創建一個ArrayList<Status>()然後Collections.sort()應該工作。

+0

+1用於建議創建一個類。 (就個人而言,我傾向於'Double'而不是'Double'。) – 2013-04-28 21:32:53

+0

@srikfreak你能告訴我以這種方式工作出了什麼問題: 'public class PositionComparator implements Comparator > { \t @Override ((Double)(o1.get(「distanceFromMe」)))。compareTo((Double)(o2))返回值爲(012)的值。獲得( 「distanceFromMe」))); \t} \t}' – 2013-04-28 21:36:29

+0

@代碼大師 - 是的,我同意。不知道更多關於用例的信息,我應該使用基本類型。更新。 – srikanta 2013-04-28 21:39:13

相關問題