티스토리 뷰

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
import java.util.*;
 
public class MapOrder implements Comparator{
    private List<Map<String,String>> mapList;
    private ArrayList treeList;
    private String key;
    
    private MapOrder(){}
    //생성자 두번째 매개변수는 정렬할 맵의 키값, 세번째는 오름차순, 내림차순
    public MapOrder(List<Map<String,String>> mapList, String key, String order){
        this.key = key;
        this.mapList=mapList;
        TreeSet set = order.equals("asc") ? new TreeSet() : new TreeSet(new MapOrder());
        for(int i=0; i<mapList.size(); i++){
            set.add(mapList.get(i).get(key));
        }
        this.treeList = new ArrayList(set);
    }
    
    
    public List orderListKeyValue(){ //정렬된 키의 값들만 리스트로 리턴
        return treeList;
    }
    //맵을 정렬해서 리스트형태로 재구성 리턴
    public List orderListMap(){
        ArrayList l = new ArrayList();
        LinkedList<Map<String,String>> ll = new LinkedList<Map<String,String>>(mapList);
        int index = 0;
        for(int i=0; i<treeList.size(); i++){
            String compareA = (String)treeList.get(i);
            for(int j=0; j<ll.size(); j++){
                Map<StringString> map = ll.get(j);
                String compareB = map.get(key);
                if(compareA.equals(compareB)){
                    l.add(map);
                    ll.remove(j);
                    index++;
                    //if(index==treeList.size()){ break; }
                }
            }
        }
        return l;
    }
    
    @Override
    public int compare(Object o1, Object o2) {
        if(o1 instanceof Comparable && o2 instanceof Comparable){
            Comparable c1 = (Comparable)o1;
            Comparable c2 = (Comparable)o2;
            return c1.compareTo(c2)*-1;
        }
        
        return -1;
    }
    
    
    public static void main(String[] args){
        List list = new ArrayList();
        Map map = new HashMap();
        map.put("학번""05");
        map.put("나이""29");
        map.put("학년""2");
        map.put("이름""남궁춘");
        list.add(map);
        map = new HashMap();
        map.put("학번""01");
        map.put("나이""33");
        map.put("학년""4");
        map.put("이름""남궁학");
        list.add(map);
        map = new HashMap();
        map.put("학번""06");
        map.put("나이""28");
        map.put("학년""1");
        map.put("이름""최유령");
        list.add(map);
        
        System.out.println(list);
        
        MapOrder mo = new MapOrder(list,"학번","desc");
        System.out.println("단순 키값 정렬 받아옴-->"+mo.orderListKeyValue());
        System.out.println("정렬된 형태의 리스트맵을 받아옴-->"+mo.orderListMap());
    }
    
}
 

 

기존 TreeSet이나 TreeMap에서 지원하는 정렬을 참고하여...

Comporator인터페이스를 구현받아서 사용하고자하는 형태의 정렬을 만들었다.

좀 짜다보니 복잡도가 심한 듯 하다..

 

결과

[{학년=2, 나이=29, 이름=남궁춘, 학번=05}, {학년=4, 나이=33, 이름=남궁학, 학번=01}, {학년=1, 나이=28, 이름=최유령, 학번=06}]

단순 키값 정렬 받아옴-->[06, 05, 01]

정렬된 형태의 리스트맵을 받아옴-->[{학년=1, 나이=28, 이름=최유령, 학번=06}, {학년=2, 나이=29, 이름=남궁춘, 학번=05}, {학년=4, 나이=33, 이름=남궁학, 학번=01}]

'JAVA > 정리' 카테고리의 다른 글

clone() 에 대하여...  (0) 2015.07.04
자바7  (0) 2014.11.26
java enum 열거형  (0) 2014.01.22
HashSet, TreeSet  (0) 2014.01.21
[Collection Framework] ArrayList, LinkedList  (0) 2014.01.16
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday