前言
今日一同事,咨询我,map中key值排序的问题,具体需求如下:
map中key值为字符串,长度不等,现在要求,key值按照字符串排序;
分析此题:
首先得将map中的key值通过map.keySet()取出,然后转成ArrayList,再通过Collections.sort方法排序即可。
具体代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Task {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("service", "1");
map.put("servic", "3");
map.put("cervice", "12");
map.put("aice", "12");
map.put("eervice", "12");
map.put("hervice", "12");
Set<String> set = map.keySet();
List<String> list = new ArrayList<String>(set);
Collections.sort(list, new Comparator<String>() {
public int compare(String o1, String o2) {
char[] cs1 = o1.toCharArray();
char[] cs2 = o2.toCharArray();
int result = -1;
for (int i = 0; i < cs1.length; i++) {
if (cs2.length <= i) {
result = 1;
break;
}
if (cs1[i] > cs2[i]) {
result = 1;
break;
} else if (cs1[i] < cs2[i]) {
result = -1;
break;
}
}
return result;
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}