티스토리 뷰
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<String, String> 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