Это мой HashMap:Как отсортировать hasmap в java?
Map<String,String> unsortMap = new HashMap<String,String>()
эта карта содержит такие значения, как следует
unsortMap.put("18/06/2012", "18/06/2012");
unsortMap.put("19/06/2012", "19/06/2012");
unsortMap.put("20/06/2012", "20/06/2012");
unsortMap.put("26/06/2012", "26/06/2012");
unsortMap.put("27/06/2012", "27/06/2012");
unsortMap.put("04/07/2012", "04/07/2012");
unsortMap.put("13/07/2012", "13/07/2012");
unsortMap.put("29/06/2012", "29/06/2012");
код, который я использую для сортировки эта карта выглядит следующим образом:
package samples;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class SortMapExample{
public static void main(String[] args) {
System.out.println("Unsort Map......");
Map<String,String> unsortMap = new HashMap<String,String>();
unsortMap.put("18/06/2012", "18/06/2012");
unsortMap.put("19/06/2012", "19/06/2012");
unsortMap.put("20/06/2012", "20/06/2012");
unsortMap.put("26/06/2012", "26/06/2012");
unsortMap.put("27/06/2012", "27/06/2012");
unsortMap.put("04/07/2012", "04/07/2012");
unsortMap.put("13/07/2012", "13/07/2012");
unsortMap.put("29/06/2012", "29/06/2012");
Iterator iterator=unsortMap.entrySet().iterator();
for (Map.Entry entry : unsortMap.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
System.out.println("Sorted Map......");
Map<String,String> sortedMap = sortByComparator(unsortMap);
for (Map.Entry entry : sortedMap.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
}
private static Map sortByComparator(Map unsortMap) {
List list = new LinkedList(unsortMap.entrySet());
//sort list based on comparator
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
//put sorted list into map again
Map sortedMap = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
}
В результате я получаю это:
Sorted Map......
Key : 04/07/2012 Value : 04/07/2012
Key : 13/07/2012 Value : 13/07/2012
Key : 18/06/2012 Value : 18/06/2012
Key : 19/06/2012 Value : 19/06/2012
Key : 20/06/2012 Value : 20/06/2012
Key : 26/06/2012 Value : 26/06/2012
Key : 27/06/2012 Value : 27/06/2012
Key : 29/06/2012 Value : 29/06/2012
Я хочу, чтобы результат был l икэ следующее: (карта должна быть отсортирована на основе месяца также)
18/06/2012
19/06/2012
20/06/2012
26/06/2012
27/06/2012
29/06/2012
04/07/2012
13/07/2012
Просьбы помочь мне, как об этом?
Любая причина, по которой вы не работаете с java.util.Date вместо String? –
Возможно, это не то, что вы хотите услышать, но я не мог устоять: если вы сортируете строки, вы должны использовать [ISO 8601] (http://en.wikipedia.org/wiki/ISO_8601), маленький конец Очень плохой. –