2013-06-25 72 views
3

在Java中。 如何按給定字符串和數字前綴對地圖進行排序。 我從屬性映射文件:Java排序映射<String,String>按字符串前綴

1_aaa=bla1 
2_bbb=bla2 
3_ccc=bla3 
4_ddd=bla4 
... 
10_jjj=bla10 
11_kkk=bla11 
12_lll=bla12 

我從文件加載的屬性:

FileInputStream is =new FileInputStream(new File(filePath)); 
Properties prop = new Properties(); 
prop.load(is); 

後:使用TreeMap的時候 SortedMap<Object, Object> sortedProperties new TreeMap<Object, Object>(prop);

現在 - > '10_jjj'是SortedMap 中的第一個元素,我想'1_aaa'是第一個元素。

任何想法?

感謝

回答

6

行爲是因爲0 comes before _ in the ASCII table

爲了得到您想要的結果,請編寫您的Comparator<String>並根據前綴比較字符串,然後使用TreeMap(Comparator)構造函數構造地圖。

沒有任何錯誤檢查一個簡單的示例等:

class Cmp implements Comparator<String> { 
    @Override 
    public int compare(String a, String b) { 
     return prefixNum(a) - prefixNum(b); 
    } 

    private int prefixNum(String a) { 
     return Integer.parseInt(a.split("_")[0]); 
    } 
} 

然後實例映射是這樣的:

TreeMap<String, String> map = new TreeMap<String, String>(new Cmp()); 
+0

如何實現這一點? – user2520395

+0

@ user2520395添加了代碼示例。 –

+0

你是一個拯救生命的人。謝謝。 – user2520395

2

你必須創建自己的Comparator到acomplish這一點。

在創建TreeMap期間,您可以將此Comparator設置爲Map,然後按照實施方式對其進行排序。

0

您需要將前綴轉換爲整數,然後對它們進行排序,例如,

int prefix = Integer.parseInt(str.substring(0, str.indexOf("_"))); // sort/compare on this 
0

這裏是工作代碼:

class ComparatorOfNumericString implements Comparator<String>{ 

    public int compare(String o1, String o2) { 
     // TODO Auto-generated method stub 
     String a[] = o1.split("_"); 
     String b[] = o2.split("_"); 
     return Integer.parseInt(a[0])-Integer.parseInt(b[0]); 
    } 
} 
+0

你是一個拯救生命的人。謝謝。 – user2520395

0

這應該做些什麼,你需要

Properties p = new Properties(); 
    p.setProperty("1_aaa", "blah"); 
    p.setProperty("10_aaa", "blah"); 

    Comparator<Object> c = new Comparator<Object>() 
    { 
     @Override 
     public int compare(Object o1, Object o2) 
     { 
      String s1 = (String)o1; 
      String s2 = (String)o2; 

      Integer i1 = Integer.valueOf(s1.substring(0, s1.indexOf('_'))); 
      Integer i2 = Integer.valueOf(s2.substring(0, s2.indexOf('_'))); 

      return i1.compareTo(i2); 
     } 
    }; 

    SortedMap<Object, Object> sortedProperties = new TreeMap<Object, Object>(c); 
    sortedProperties.putAll(p); 

    System.out.println(sortedProperties.firstKey()); 
相關問題