2013-06-25 2 views
3

Java에서. 숫자 접두사가있는 주어진 문자열로지도를 정렬하는 방법은 무엇입니까? 내가 속성의 맵 파일을 얻을 :Java 정렬 맵 <String, String> by String prefix

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); 

이후 : 트리 맵을 사용하는 경우 이제 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을 생성하는 동안이 ComparatorMap에 줄 수 있으며이를 구현 한 방식으로 정렬 할 수 있습니다.

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());