맵의 값 정렬만 보실 분들은 http://huskdoll.tistory.com/175을 보시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; public class NewSort { public static void main(String[] args) { // TODO Auto-generated method stub //List 안에있는 Map 데이터를 입력 (num은 0부터 하는걸 추천: 배열번호로 추출하기 때문) String sample = "sum=4.3207455E8, num=0, 0=3.5337459E7, comp_nm=A사" + "`sum=2.191123E7, num=1, 0=1991930.0, comp_nm=B사" + "`sum=8030636.0, num=2, 0=730057.0, comp_nm=C사" + "`sum=6.7682255E7, num=3, 0=6152932.0, comp_nm=D사" + "`sum=1195123.0, num=4, 0=108647.0, comp_nm=E사"; String[] main = sample.split("`"); List<HashMap> listData = new ArrayList(); HashMap<String, Object> hashmap1 = new HashMap<String, Object>(); for(String sub: main){ String[] main2 = sub.split(","); hashmap1 = new HashMap<String, Object>(); for(String sub2: main2){ hashmap1.put(sub2.split("=")[0].trim(), sub2.split("=")[1].trim()); } listData.add(hashmap1); } //데이터 생성 완료 for(HashMap<String,Object> tmp :listData){ System.out.println(tmp); } System.out.println("========================================================"); //List 안에있는 Map 중에서 sum이 큰 수로 내림정렬 하시오 HashMap<String,Double> map = new HashMap<String,Double>(); ValueComparator bvc = new ValueComparator(map); TreeMap<String,Double> sorted_map = new TreeMap<String,Double>(bvc); //리스트에서 순번과 합계만 따로 맵에 넣는다. for(HashMap<String,Object> hashmap: listData){ map.put((String) hashmap.get("num"), Double.parseDouble((String) hashmap.get("sum"))); } //정렬 (Map의 값 정렬) sorted_map.putAll(map); //맵 정렬 출력 System.out.println(sorted_map); System.out.println("========================================================"); List<HashMap<String,Object>> resultListData = new ArrayList(); for (Map.Entry<String,Double> entry : sorted_map.entrySet()) { //정렬한 리스트에서 순번을 배열번호로 변경하여 원본 리스트에서 추출 resultListData.add(listData.get(Integer.parseInt(entry.getKey()))); } //정렬 결과 for(HashMap<String,Object> tmp :resultListData){ System.out.println(tmp); } } } class ValueComparator implements Comparator<String> { Map<String, Double> base; /** * @param base */ public ValueComparator(Map<String, Double> base) { this.base = base; } // Note: this comparator imposes orderings that are inconsistent with equals. public int compare(String a, String b) { if (base.get(a) >= base.get(b)) { return -1; } else { return 1; } // returning 0 would merge keys } } |
BigDecimal 숫자 형변환 (0) | 2015.03.13 |
---|---|
Map의 value(값)로 정렬(Sort) (0) | 2015.03.05 |
java submit html form (0) | 2015.02.17 |
파일 인코딩 변경 (복사) (0) | 2014.06.20 |
Java Collection (Set, List, Map) (0) | 2014.05.22 |
댓글 영역