Possible Duplicate:
How to sort a Map<Key, Value> on the values in Java?
我有一个 java map Map<String, String>
. map 内容<Id, Date>
。我想根据日期对这些 map 进行排序。我怎样才能做到这一点?这是打印后的 map
-------------------------------------
PTRRRRRR 08-20-2011
-------------------------------------
TESTDESC 08-01-2012
-------------------------------------
TESTMYO 12-29-2011
-------------------------------------
TESTTEST 08-01-2012
-------------------------------------
TESTPROL 08-01-2012
-------------------------------------
TESTPRO 08-01-2012
-------------------------------------
PNAMELQ 08-02-2012
-------------------------------------
TESTMYO 12-29-2011
------------------------------------
最佳答案
您可以使用这样的自定义比较器。
String data = "PTRRRRRR 08-20-2011\n" +
"TESTDESC 08-01-2012\n" +
"TESTMYO 12-29-2011\n" +
"TESTTEST 08-01-2012\n" +
"TESTPROL 08-01-2012\n" +
"TESTPRO 08-01-2012\n" +
"TESTPRO 08-01-2012\n" +
"PNAMELQ 08-02-2012\n" +
"TESTMYO 12-29-2011\n";
Map<String, String> map = new LinkedHashMap<String, String>();
for (String line : data.split("\n")) {
String[] keyValue = line.split(" +");
map.put(keyValue[0], keyValue[1]);
}
Map.Entry<String, String>[] entries = map.entrySet().toArray(new Map.Entry[map.size()]);
Arrays.sort(entries, new Comparator<Map.Entry<String, String>>() {
SimpleDateFormat date = new SimpleDateFormat("MM-dd-yyyy");
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
try {
return date.parse(o1.getValue()).compareTo(date.parse(o2.getValue());
} catch (ParseException e) {
throw new AssertionError(e);
}
}
});
for (Map.Entry entry : entries) {
System.out.println(entry);
}
打印
PTRRRRRR=08-20-2011
TESTMYO=12-29-2011
TESTDESC=08-01-2012
TESTTEST=08-01-2012
TESTPROL=08-01-2012
TESTPRO=08-01-2012
PNAMELQ=08-02-2012
关于java - 如何使用其他值对 Java 中的 Map<String, String> 中的日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12192580/