如何給HashMap中的值排序?這個問題很多人都遇到過,很常見的一個方案是使用LinkedHashMap,因為LinkedHashMap可以記住元素放入的順序,可以認為是真正的“有序”(想讓HashMap有序是不可能的),我比較喜歡。然而問題是往往數據已經封裝在了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()); } Collections.sort(keyList); Iterator<String> it2 = keyList.iterator(); while(it2.hasNext()){ String key = it2.next(); myMap.put(key, myMapTmp.get(key)); }
值得注意的是Collections.sort()方法,API上的解釋是:根據元素的自然順序對指定列表按升序進行排序。列表中的所有元素都必須實現 Comparable 接口。此外,列表中的所有元素都必須是可相互比較的(也就是說,對于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得拋出 ClassCastException)。我已經測試過String類型是可以直接使用這個接口的,如果你的list中元素是自定義的,那么就要自己實現Comparable,自己編寫比較器了。說了這么多,正文其實是在這里,在用ibatis的queryForMap是查出的結果是無序的,即便是sql中有orderby,即便是ibatis文件中指定了返回值類型(有序類型,如TreeMap,LinkedHashMap),ibatis對數據的填充到底是怎么弄的,我也不清楚,所以才只能在內存中排序,也不失是一種辦法,同時拋磚引玉,看看有沒有大俠給說說有沒有其他辦法。
新聞熱點
疑難解答