- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- public class Main {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Map<String,String> map1 = new HashMap<String, String>();
- map1.put("operationTime", "2010-01-10 12:20:00");
- Map<String,String> map2 = new HashMap<String, String>();
- map2.put("operationTime", "2010-01-10 12:40:00");
- Map<String,String> map3 = new HashMap<String, String>();
- map3.put("operationTime", "2010-01-10 12:30:00");
- List<Map<String,String>> list = new ArrayList<Map<String,String>>();
- list.add(map1);
- list.add(map2);
- list.add(map3);
- System.out.println("排序前的list:");
- System.out.println(list);
- final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Collections.sort(list, new Comparator<Map<String,String>>(){
- public int compare(Map<String, String> o1, Map<String, String> o2)
- {
- //取出操作时间
- int ret = 0;
- try
- {
- ret = df.parse(o1.get("operationTime")).compareTo(df.parse(o2.get("operationTime")));
- } catch (ParseException e)
- {
- throw new RuntimeException(e);
- }
- return ret;
- }
- });
- System.out.println("排序后的list:");
- System.out.println(list);
- }
- }
如果map的value是double类型的小数,
Collections.sort(list, new Comparator<Map<String,Object>>(){
public int compare(Map<String, Object> o1, Map<String, Object> o2)
{
double d1 = Double.valueOf(o1.get("ss").toString());
double d2 = Double.valueOf(o2.get("ss").toString());
return (int)((d1-d2)*100);
}
});
public int compare(Map<String, Object> o1, Map<String, Object> o2)
{
double d1 = Double.valueOf(o1.get("ss").toString());
double d2 = Double.valueOf(o2.get("ss").toString());
return (int)((d1-d2)*100);
}
});
由于compare返回int类型,需要根据double小数位数,return (int)((d1-d2)*100);才能正确排序。
OK!