簡體   English   中英

Java中HashMap的排序

[英]sorting of HashMap in Java

我有一張地圖,里面有鍵和值

關鍵字:-案例1,案例2......案例10

值:- 一月、二月......十月

現在,當我將此地圖放入數組列表時(以便我可以對其進行排序)

for (String key : dataValueMap.keySet()) {
    System.out.println(key + " " + dataValueMap.get(key));
}
ArrayList<String> keys = new ArrayList<String>(
dataValueMap.keySet());
Collections.sort(keys);
for (String counter : keys) {
   System.out.println(counter); >>>>>BUT it prints like :- case 1  then  case 10  then  case 2, case 3, case 4 etc.
}

請幫助解決這個問題,

提前致謝

使用自定義Comparator實現對您的集合進行排序。 這需要並比較鍵的整數,但依賴於格式 case n

例子

List<String> keys = new ArrayList<>();
keys.add("case 10");        
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");        
Collections.sort(keys, new Comparator<String>() {

    @Override
    public int compare(String s1, String s2) {
        s1 = s1.split(" ")[1];
        s2 = s2.split(" ")[1];
        return Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2));
    }
});

for (String key : keys) {
    System.out.println(key);
}

如果您確定密鑰格式,那么您可以將其按空格拆分並將實際值與比較器進行比較,例如:

Map<String, Object> myMap = 
        new TreeMap<String, Object>(new Comparator<String>()
        {
            public int compare(String o1, String o2)
            {
                Integer value1 = Integer.parseInt(o1.split("\\s+")[1]);
                Integer value2 = Integer.parseInt(o2.split("\\s+")[1]);
                return value1.compareTo(value2);
            } 
});

雖然如果密鑰格式不正確它會中斷,但我們可以根據預期的行為添加處理。

那么你只需要為你的字符串版本定義一個新的自定義Comparator ,並且可以編寫任何邏輯來比較列表中的兩個字符串。

List<String> keys = new ArrayList<>();

keys.add("case 10");    
keys.add("case 3");        
keys.add("case 1");
keys.add("case 2");

Comparator<String> comparator = new Comparator<String>(){
    @Override
    public int compare(String s1, String s2) {
        return Integer.compare(Integer.parseInt(s1.substring(5)), Integer.parseInt(s2.substring(5)));
    }  
};

Collections.sort(keys, comparator);
for (String counter : keys) {
    System.out.println(counter);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM