簡體   English   中英

如何通過Java的數字字符串鍵對Map進行排序

[英]How to sort a Map in Java by its String keys which are numeric

我已經創建了一個名為result的地圖。

sortByKeys方法中,因為我的鍵是帶有數字值的字符串,所以我將它們轉換為Integer鍵類型Map,然后對其進行了排序。

當我單獨循環和打印時,排序工作正常,但是當我在另一個地圖中設置它們時,排序不能正常工作。

public class TestDate {
    public static void main (String args[]){

    Map<String, String> result = new HashMap<String, String>();

        result.put("error", "10");
        result.put("1","hii");
        result.put("Update","herii");
        result.put("insert","insert");
        result.put("10","hiiuu");
        result.put("7","hii");
        result.put("21","hii");
        result.put("15","hii"); 

        Map<String, String> sorted = sortByKeys(result);
        //System.out.println(sorted);   
    }

    private static Map<String, String> sortByKeys(Map<String, String> map) {
        Map <Integer,String> unSorted = new  HashMap<Integer, String>();
        Map <String,String> sorted = new  HashMap<String, String>();
        for (Map.Entry<String, String> entry : map.entrySet())
        {
            try{
                int foo = Integer.parseInt(entry.getKey());            
                unSorted.put(foo, entry.getValue());                
            }catch (Exception e){

            }
        }
        Map<Integer, String> newMap = new TreeMap<Integer, String>(unSorted); 
        Set set = newMap.entrySet();
        Iterator iterator = set.iterator();
        while(iterator.hasNext()) {
            Map.Entry me = (Map.Entry)iterator.next();
            System.out.println(me.getKey());
            System.out.println(me.getValue());
            sorted.put(me.getKey().toString(),  me.getValue().toString());

       }
        System.out.println(sorted);

        return null;
    }   
}

這是o / p:

1
hii
7
hii
10
hiiuu
15
hii
21
hii
{21=hii, 10=hiiuu, 1=hii, 7=hii, 15=hii}

如果您不需要性能的最后一英寸,則可以使用SortedMap直接解決此問題,而無需執行其他步驟即可對地圖進行排序:

Map<String,String> result = new TreeMap<>(Comparator.comparingInt(Integer::parseInt));

如果不幸的一類人仍然被拒絕訪問Java 8,則必須長期實施Comparator

new TreeMap<>(new Comparator<String,String> { public int compare(String a, String b) {
  return Integer.compare(Integer.parseInt(a), Integer.parseInt(b));
}});

上面的方法僅在所有鍵都是可解析整數的假設下起作用。 如果不是這種情況,那么您將無法直接使用SortedMap ,而是將原始地圖轉換成它,過濾掉無法解析的鍵。

這是因為您要放入的MapHashMap ,未排序。 即使您以正確的順序放置結果,也無法保證您會從HashMap得到結果。

(並且將其sorted不會改變任何內容:))

您打印了2張不同的地圖,但並不相同:您遍歷並打印newMap地圖的條目,最后打印sorted地圖。

您看到已排序的條目已打印,因為您遍歷了已排序的newMap

然后,您將打印未排序sorted地圖(盡管其名稱)。 您打印另一個地圖實例。

打印此:

System.out.println(newMap); // This is the instance of the sorted "TreeMap"

暫無
暫無

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

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