ABOUT ME

-

오늘 방문자
-
어제 방문자
-
전체
-
  • [JAVA] 객체 정렬 Comparator
    JAVA 2018. 8. 29. 12:37

    * Comparator

    => 기본정렬기준 외에 다른 여러 기준으로 정렬하고자 할때 사용하는 클래스



    단순 리스트를 정렬할때 보통 Collections.sort()를 사용한다 //오름차순


    ArrayList<String> list = new ArrayList<String>();

    list.add("d");

    list.add("c");

    list.add("b");

    list.add("a");

    Collections.sort(list); 


    출력시: abcd



    하지만 개발을 하다보면

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class User{
        private String name;
        private int grade;
        private int no; //
    생략....    
    }
     
    cs

    이러한 형태의 VO를 List에 담기도 한다

    만약에 아래와 같은 코드가 있다고 하자
    List<UserVO> list = memberService.getUserList();

    여기서 
    Collections.sort(list);를 실행하게 된다면?
    에러가발생한다.
    왜냐하면 어떤 기준으로 정렬할지 모르기 때문이다.

    단순 정렬이라면 Comparable을 사용해도되고, 다른 여러가지 조건을 더주려면 Comparator을 사용하면된다.

    형태는 Collections.sort(객체, new Comparator<타입>(){} 선언하고

    compare메소드를 구현하면 된다.

    public int compare(User u1, User u2)메소드는 반환형이
    양수이면 u1과 u2의 자리를 바꾸고
    음수이면 u1과 u2의 자리를 바꾸지않는다








    * 사용예제




    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    package test_java;
     
    import java.io.IOException;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;

    import org.apache.commons.lang3.builder.CompareToBuilder;
     
    public class Main {
     
        public static void main(String[] args) throws IOException 
        {
            List<User> list= getCreateUsers();
            
            System.out.println("@@@정렬전@@@");
            for(User data : list) {
                System.out.print(data.getNo());
            }
            
            
            
            System.out.println();
            System.out.println("@@@숫자 내림차순 정렬@@@");
            Collections.sort(list, new Comparator<User>() {
                public int compare(User o1, User o2) {
                    if(o1.getNo()>o2.getNo()) {
                        return -1;
                    }else if(o1.getNo()<o2.getNo()) {
                        return 1;
                    }else {
                        return 0;
                    }
                }
            });
            for(User data : list) {
                System.out.print(data.getNo());
            }
            
            
            
            
            System.out.println();
            System.out.println("@@@숫자 오름차순 정렬@@@");
            Collections.sort(list, new Comparator<User>() {
                public int compare(User o1, User o2) {
                    if(o1.getNo()>o2.getNo()) {
                        return 1;
                    }else if(o1.getNo()<o2.getNo()) {
                        return -1;
                    }else {
                        return 0;
                    }
                }
            });
            for(User data : list) {
                System.out.print(data.getNo());
            }
                
            
            
            System.out.println();
            System.out.println("@@@이름 오름차순@@@");
            Collections.sort(list, new Comparator<User>(){
                public int compare(User o1, User o2) {
                    return o1.getName().compareTo(o2.getName());
                }
            });
            for(User data : list) {
                System.out.print(data.getName()+",");
            }
            
            
            
            System.out.println();
            System.out.println("@@@이름 내림차순@@@");
            Collections.sort(list, new Comparator<User>(){
                public int compare(User o1, User o2) {
                    return o2.getName().compareTo(o1.getName());
                }
            });
            for(User data : list) {
                System.out.print(data.getName()+",");
            }
            
            System.out.println();
            System.out.println("@@@ 점수 내림차순 + 이름 오름차순@@@");
            Collections.sort(list, new Comparator<User>() {
                public int compare(User o1, User o2) {
                    if(o1.getGrade()>o2.getGrade()) {
                        return -1;
                    }else if(o1.getGrade()<o2.getGrade()) {
                        return 1;
                    }else {
                        if(o1.getGrade()==o2.getGrade()) {
                            return o1.getName().compareTo(o2.getName());
                        }else {
                            return 0;
                        }
                    }
                }
            });
            for(User data : list) {
                System.out.println("이름:"+data.getName()+"/"+"점수:"+data.getGrade());
            }
            
        }
        
        
        
        private static List<User> getCreateUsers() {
             List<User> users = new ArrayList<User>();
     
             User user = new User();
             user.setName("나씨");
             user.setGrade(50);
             user.setNo(1);
             users.add(user);
     
             user = new User();
             user.setName("라씨");
             user.setGrade(100);
             user.setNo(2);
             users.add(user);
     
             user = new User();
             user.setName("가씨");
             user.setGrade(100);
             user.setNo(3);
             users.add(user);
     
             user = new User();
             user.setName("다씨");
             user.setNo(4);
             user.setGrade(1);
             users.add(user);
            return users;
        }
    }// CLASS END
    cs


    댓글

Designed by Tistory.