2013-10-09 2 views
3
Map<String, String> map ; 
List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 


/////OnCreate............. 


function1(){ 
map = new TreeMap<String, String>(); 
map.put("id", "id"); 
map.put("amont", "amount"); 

list.add(map); 

System.out.println(list); 
} 

입력 값이 상승하여 양 1,3,5,57,80= ID의 순서

입력 값을리스트 정렬 할 수 없음

정렬 없음 1005002001010000 금액의 오름차순으로 목록. 삽입 된 순서대로 표시됩니다.

어떻게 수정합니까? 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.

예상 출력 :

list.add(map); 
Collections.sort(list) 

System.out.println(list) 

은 지금 콘텐츠의 유형의 오름차순으로 목록을 인쇄합니다 :

amt=10 id=4 
amt=100 id=1 
amt=200 id=3 
amt=500 id=2 
amt=10000 id=5 
+0

내 대답을 확인하고 주어진 링크 만 있으면 거기에만 답을 얻을 수 있습니다. 사용자 정의 메소드없이 값순으로 맵을 정렬 할 수 없습니다. –

+0

Hello Manish 위의 기존 코드에 변경 사항을 적용하려면 어떻게해야합니까? 변경 사항을 적용하여 편집하십시오. 도움이 될 것입니다. 감사합니다. – jason

+0

Sory dear! 당신의 모든 것이 당신 자신의 것입니다. 아무도 당신을 위해 음식을 조리하지 않을 것입니다. –

답변

2

이 여기 귀하의 의견

Map<String, String> map ; 
    List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
    map = new TreeMap<String, String>(); 
    map.put("id","1"); 
    map.put("amount","100"); 
    list.add(map); 
    map = new TreeMap<String, String>(); 
    map.put("id","2"); 
    map.put("amount","500"); 
    list.add(map); 
    map = new TreeMap<String, String>(); 
    map.put("id","3"); 
    map.put("amount","200"); 
    list.add(map); 
    map = new TreeMap<String, String>(); 
    map.put("id","4"); 
    map.put("amount","10"); 
    list.add(map); 
    map = new TreeMap<String, String>(); 
    map.put("id","5"); 
    map.put("amount","10000"); 
    list.add(map); 

당신의 분류 코드

입니다 가정하면, 전체 작업 복사본입니다,451,515,
Collections.sort(list, new Comparator<Map<String, String>>() { 

     @Override 
     public int compare(Map<String, String> o1, Map<String, String> o2) { 
      String value1 = o1.get("amount"); 
      String value2 = o2.get("amount"); 
      return Integer.parseInt(value1)-Integer.parseInt(value2); 
     } 
    }); 

    for (Map<String, String> map1 : list) { 
     String id = map1.get("id"); 
     String amount = map1.get("amount"); 
     System.out.println("amount= "+amount + " , " +"id = "+id); 
    } 

출력

amount= 10 , id = 4 
amount= 100 , id = 1 
amount= 200 , id = 3 
amount= 500 , id = 2 
amount= 10000 , id = 5 

갱신

값이 소수점 경우 다음 코드를 return Integer.parseInt(value1)-Integer.parseInt(value2);를 교체합니다.

return Double.valueOf(value1).compareTo(Double.valueOf(value2)); 
+0

안녕하세요 Prabhakaran.Thanks 코드와 시간하지만 금액에 소수점이 있다면 int가 아니라 오히려 부동/이중 의미합니다. 어떻게 현재 변경됩니다.이 줄에 오류가 발생했습니다. 반환 Integer.parseInt (value1) - Integer.parseInt (value2); double로 변경하면 리턴 타입에 오류가 발생합니다. – jason

+0

@jason이 답변을 업데이트했습니다. – Prabhakaran

+0

굉장 Prabhakaran 코드와 +1을 주셔서 감사합니다. 또한 lat/lng을 많이 사용하는 또 다른 문자열을 hashmap에 추가했습니다. 어떻게 arraylist로 다시 가져올 수 있습니까? ArraysList 정점. 문자열 검색을 위해 idlatlng = map1.get ("latlng "); 하지만 긴리스트가 있습니다. Phabhakaran을 도와주세요. 고맙습니다. – jason

1

를 사용하여 정렬()

예 : 양의 오름차순 순서 포함되어 있습니다.

+0

Hello Mr.Mittal하지만 아래 오류가 나타납니다. 바운드 불일치 : Collections 유형의 제네릭 메서드 sort (List )는 인수 (List >)에 적용 할 수 없습니다. 유추 된 유형 Map 은 바운드 된 매개 변수 대신 사용할 수있는 유효한 대체 코드가 아닙니다. > – jason

1

아니요 .. 기본 정렬 방법을 사용하여 값에 따라지도를 축소 할 수 없습니다. 정렬을 위해 사용자 지정 방법을 작성해야합니다. 은 ..이 TreeMap sort by value

를 링크 - 당신은 키으로 분류하려는 경우 내가 사용 트리 맵을 제안

감사를 참조하십시오!

+0

안녕하세요 Mr.Srivastava 귀하의 답변을 확인했지만 이 ​​있으며 예제는 코드를 어떻게 변환해야합니까? 위에 표시된 코드를 편집 할 수 있다면 큰 도움이 될 것입니다. 다시 한 번 감사드립니다. – jason

+1

지도 map = 새 TreeMap (); \t map.put ("A", "a"); \t map.put ("B", "b"); \t System.out.println (map); –

1

해결됩니다. Comparator 걸리는 Collections.sort() 메서드가 필요합니다. 그래서 당신은 amount에 의해 정렬하고자하는 것, 당신은 아래와 같은 비교기를 구현해야합니다. 여기

Collections.sort(list, new Comparator<Map<String, String>>() { 
    @Override 
    public int compare(Map<String, String> o1, Map<String, String> o2) { 
     String amount1 = o1.get("amount"); 
     String amount2 = o2.get("amount"); 
     return new Integer(amount1).compareTo(new Integer(amount2)); 
    } 
}); 

List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 

Map<String, String> map1 = new TreeMap<String, String>(); 
map1.put("id", "2"); 
map1.put("amount", "200"); 

Map<String, String> map2 = new TreeMap<String, String>(); 
map2.put("id", "1"); 
map2.put("amount", "100"); 

Map<String, String> map3 = new TreeMap<String, String>(); 
map3.put("id", "3"); 
map3.put("amount", "300"); 

list.add(map1); 
list.add(map2); 
list.add(map3); 

Collections.sort(list, new Comparator<Map<String, String>>() { 
    @Override 
    public int compare(Map<String, String> o1, Map<String, String> o2) { 
     String amount1 = o1.get("amount"); 
     String amount2 = o2.get("amount"); 
     return amount1.compareTo(amount2); 
    } 
}); 

System.out.println(list); 

그것은 인쇄해야합니다,

[{amount=100, id=1}, {amount=200, id=2}, {amount=300, id=3}] 
+0

안녕하세요 JayaMohan. 마지막 값 (정렬)까지 마지막 값이 정렬되지 않을 때까지 계속 똑같은 위치에 있습니다. – jason

+0

나는'compare' 메소드를 업데이트했다. 그것을 시도 할 수 있습니까? – Jayamohan

+0

금액에 10 진수가있는 경우 변경하면 'Double (amount1) .compareTo (new Double (amount2))'로 변경됩니다. int와 decimal 값 모두에 적용됩니다 – Jayamohan