首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java 对List<Map<String, Object>> 开展排序

2013-03-26 
java 对ListMapString, Object 进行排序比如list中的值:{FINISH_DATA2014-01-11, BEGIN_DATA2014-01

java 对List<Map<String, Object>> 进行排序
比如list中的值:{FINISH_DATA=2014-01-11, BEGIN_DATA=2014-01-05}{FINISH_DATA=2013-03-16, BEGIN_DATA=2013-03-10}
{FINISH_DATA=2013-03-09, BEGIN_DATA=2013-03-03}
{FINISH_DATA=2013-01-19, BEGIN_DATA=2013-01-13}
{FINISH_DATA=2013-01-12, BEGIN_DATA=2013-01-06}
{FINISH_DATA=2013-01-05, BEGIN_DATA=2012-12-30}
{FINISH_DATA=2012-01-07, BEGIN_DATA=2012-01-01}
{FINISH_DATA=2013-03-02, BEGIN_DATA=2013-02-24} 
对 BEGIN_DATA按降序排序,求大神解答。  感激不尽! list java object
[解决办法]

package org.vicky.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.Map;

public class TestComparator implements Comparator<Map<String, String>> {

@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = null;
Date d2 = null;
for (String k : o1.keySet()) {
try {
d1 = format.parse(o1.get(k).substring(11));
} catch (ParseException e) {
e.printStackTrace();
}
}
for (String k : o2.keySet()) {
try {
d2 = format.parse(o2.get(k).substring(11));
} catch (ParseException e) {
e.printStackTrace();
}
}
if (d1.before(d2)) {
return 1;
} else if (d1.after(d2)) {
return -1;
} else {
return 0;
}
}

}

package org.vicky.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map1 = new HashMap<String, String>();
map1.put("FINISH_DATA=2013-03-09", "BEGIN_DATA=2013-03-03");
Map<String, String> map2 = new HashMap<String, String>();
map2.put("FINISH_DATA=2013-01-19", "BEGIN_DATA=2013-01-13");
Map<String, String> map3 = new HashMap<String, String>();
map3.put("FINISH_DATA=2013-01-12", "BEGIN_DATA=2013-01-06");
Map<String, String> map4 = new HashMap<String, String>();
map4.put("FINISH_DATA=2013-01-05", "BEGIN_DATA=2012-12-30");
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
Collections.sort(list, new TestComparator());
for (Map<String, String> m : list) {
for (Map.Entry<String, String> en : m.entrySet()) {
System.out.println(en.getKey() + " , " + en.getValue());
}
}
}
}

------解决方案--------------------


楼上速度快啊,在我帮你做Demo的时候,给你提交了比较好的结果。不过我这里也做好了,不妨也贴出来,我Map里存的是String,不是Date,供楼主参考。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> data1 = new HashMap<String, String>();
Map<String, String> data2 = new HashMap<String, String>();
Map<String, String> data3 = new HashMap<String, String>();
data1.put("BEGIN_DATA", "2014-01-05");
data2.put("BEGIN_DATA", "2014-01-01");
data3.put("BEGIN_DATA", "2014-01-08");
list.add(data1);
list.add(data2);
list.add(data3);

// 排序前
System.out.println("Before sort.");
for (Map<String, String> m : list) {
System.out.println(m.get("BEGIN_DATA"));
}

// 排序
Collections.sort(list, new MapComparator());
// 排序后
System.out.println("After sort.");
for (Map<String, String> m : list) {
System.out.println(m.get("BEGIN_DATA"));
}
}

static class MapComparator implements Comparator<Map<String, String>> {

@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
// TODO Auto-generated method stub
String b1 = o1.get("BEGIN_DATA");
String b2 = o2.get("BEGIN_DATA");
if (b2 != null) {
return b2.compareTo(b1);
}
return 0;
}

}

}

热点排行