把HashMap的元素排序后放到LinkedHashMap中

    如何给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对数据的填充到底是怎么弄的,我也不清楚,所以才只能在内存中排序,也不失是一种办法,同时抛砖引玉,看看有没有大侠给说说有没有其他办法。

猜你喜欢

转载自blog.csdn.net/flyfeifei66/article/details/39584299