Java Map按鍵排序和按值排序
系統(tǒng)
1768 0
Map排序的方式有很多種,這里記錄下自己總結的兩種比較常用的方式:按鍵排序(sort by key), 按值排序(sort by value)。
?
按鍵排序(sort by key)
jdk內(nèi)置的java.util包下的
TreeMap<K,V>
既可滿足此類需求,原理很簡單,其重載的構造器之一
有一個參數(shù),該參數(shù)接受一個比較器,比較器定義比較規(guī)則,比較規(guī)則就是作用于
TreeMap<K,V>
的鍵,據(jù)此可實現(xiàn)按鍵排序。
?
?
public Map<String, String> sortMapByKey(Map<String, String> oriMap) {
if (oriMap == null || oriMap.isEmpty()) {
return null;
}
Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String key1, String key2) {
int intKey1 = 0, intKey2 = 0;
try {
intKey1 = getInt(key1);
intKey2 = getInt(key2);
} catch (Exception e) {
intKey1 = 0;
intKey2 = 0;
}
return intKey1 - intKey2;
}});
sortedMap.putAll(oriMap);
return sortedMap;
}
private int getInt(String str) {
int i = 0;
try {
Pattern p = Pattern.compile("^\\d+");
Matcher m = p.matcher(str);
if (m.find()) {
i = Integer.valueOf(m.group());
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return i;
}
?
?
按值排序(sort by value)
按值排序就相對麻煩些了,貌似沒有直接可用的數(shù)據(jù)結構能處理類似需求,需要我們自己轉換一下。
Map本身按值排序是很有意義的,很多場合下都會遇到類似需求,可以認為其值是定義的某種規(guī)則或者權重。
?
?
本例中先將待排序oriMap中的所有元素置于一個列表中,接著使用java.util.Collections的一個靜態(tài)方法
?
來排序列表,同樣是用比較器定義比較規(guī)則。排序后的列表中的元素再依次被裝入Map,需要注意的一點是為了肯定的保證Map中元素與排序后的List中的元素的順序一致,使用了LinkedHashMap數(shù)據(jù)類型,雖然該類型不常見,但是在一些特殊場合下還是非常有用的。
?
?
引用
Java Map按鍵排序和按值排序
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元