티스토리 뷰

서버 혹은 내부에서  데이터를 가져와 여러가지 처리를 하는 경우가 많습니다. 만약 가져온 데이터가 정렬없이 뒤죽박죽 되어 있다면 사용자들로 하여금 불편을 초래 할수도 있게 됩니다.

이런 경우 가져온 데이터에 대해서 한번더 정렬을 하는 과정을 거칠 필요가 있습니다. 이번 포스팅에서는 이럴때 사용되는 정렬방법 중 Collections.sort를 사용한 방법에 대해서 알아보도록 하겠습니다.

Collections으로 되어 있기 때문에 Collection을 가지고 있는 List,Map등에서 사용 할수 있습니다. 여기서는 List를 예로 설명 해드리겠습니다. List에 몇개의 샘플 데이터를 넣은 후 이 데이터를 정렬 후 다시 출력하는 간단한 샘플입니다.


1.UserInfo class


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
public class UserInfo {
    
    /**
     * order seq
     */
    private int seq;
    
    /**
     * 이름
     */
    private String name;
    
    /**
     * 전화 번호
     */
    private String phoneNumber;
 
    @Override
    public String toString() {
        return "UserInfo [seq=" + seq + ", name=" + name + ", phoneNumber=" + phoneNumber + "]";
    }
 
    public int getSeq() {
        return seq;
    }
 
    public void setSeq(int seq) {
        this.seq = seq;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPhoneNumber() {
        return phoneNumber;
    }
 
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
cs



2.main class


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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
 
 
public class ListCollectionSort {
    
    public static void main(String[] args) {
        
        List<UserInfo> userList = new ArrayList<>();
        
        UserInfo userItem = new UserInfo();
        userItem.setSeq(5);
        userItem.setName("갑돌이");
        userItem.setPhoneNumber("010-1234-5678");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(3);
        userItem.setName("홍길동");
        userItem.setPhoneNumber("010-9999-1234");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(8);
        userItem.setName("아무개");
        userItem.setPhoneNumber("010-5555-1234");
        userList.add(userItem);
        
        
        userItem = new UserInfo();
        userItem.setSeq(1);
        userItem.setName("갑순이");
        userItem.setPhoneNumber("010-7777-5678");
        userList.add(userItem);
        
        
        System.out.println("*정렬 하기전 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareNameDesc());
        System.out.println("\n\n*String 내림차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareNameAsc());
        System.out.println("\n\n*String 오름차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        Collections.sort(userList,new CompareSeqDesc());
        System.out.println("\n\n*Int 내림차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
        
        
        Collections.sort(userList,new CompareSeqAsc());
        System.out.println("\n\n*Int 오름차순 정렬 후 리스트");
        for (UserInfo item : userList) {
            System.out.println(item.toString());
        }
    }
    
    
    /**
     * String으로 내림차순(Desc) 정렬
     * @author Administrator
     *
     */
    static class CompareNameDesc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o2.getName().compareTo(o1.getName());
        }        
    }
    
    /**
     * String으로 오름차순(Asc) 정렬
     * @author Administrator
     *
     */
    static class CompareNameAsc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getName().compareTo(o2.getName());
        }        
    }
    
    /**
     * int로 내림차순(Desc) 정렬
     * @author Administrator
     *
     */
    static class CompareSeqDesc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getSeq() > o2.getSeq() ? -1 : o1.getSeq() < o2.getSeq() ? 1:0;
        }        
    }
    
    /**
     * int로 오름차순(Asc) 정렬
     * @author Administrator
     *
     */
    static class CompareSeqAsc implements Comparator<UserInfo>{
 
        @Override
        public int compare(UserInfo o1, UserInfo o2) {
            // TODO Auto-generated method stub
            return o1.getSeq() < o2.getSeq() ? -1 : o1.getSeq() > o2.getSeq() ? 1:0;
        }        
    }
}
cs



3.실행결과


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
*정렬 하기전 리스트
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
 
 
*String 내림차순 정렬 후 리스트
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
 
 
*String 오름차순 정렬 후 리스트
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
 
 
*Int 내림차순 정렬 후 리스트
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
 
 
*Int 오름차순 정렬 후 리스트
UserInfo [seq=1, name=갑순이, phoneNumber=010-7777-5678]
UserInfo [seq=3, name=홍길동, phoneNumber=010-9999-1234]
UserInfo [seq=5, name=갑돌이, phoneNumber=010-1234-5678]
UserInfo [seq=8, name=아무개, phoneNumber=010-5555-1234]
cs



간단한 코드이므로 추가 설명은 필요 없을것 같습니다. 각각의 상황에 맞게 compare부분의 값만 변경하셔서 사용 하시면 됩니다.


댓글