如何给HashMap中的值排序?很常见的做法是使用LinkedHashMap,因为LinkedHashMap可以记住元素放入的顺序,可以认为是真正的“有序”(想让HashMap有序是不可能的),我们需要手动的把原数据排序后再放入LinkedHashMap:
Map<String, String> myMapTmp = XXDao().getXXX();
Map<String, String> myMap = new LinkedHashMap<String, String>();
List<String> keyList = new ArrayList<String>();
Iterator<String> it = myMapTmp.keySet().iterator();
while (it.hasNext())
{
keyList.add(it.next());
}
// 对key排序
Collections.sort(keyList);
Iterator<String> it2 = keyList.iterator();
while (it2.hasNext())
{
String key = it2.next();
myMap.put(key, myMap.get(key));
}
值得注意的是Collections.sort()方法:根据元素的自然顺序对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。String类型是可以直接使用这个接口的,如果你的list中元素是自定义的,那么就要自己实现Comparable,自己编写比较器了。
ibatis的queryForMap是查出的结果是无序的,即便是sql中有orderby,即便是ibatis文件中指定了返回值类型(有序类型,如TreeMap,LinkedHashMap),ibatis对数据的填充到底是怎么弄的,我也不清楚,所以才只能在内存中排序,也不失是一种办法,同时抛砖引玉,看看有没有大侠给说说有没有其他办法。