본문 바로가기
Language/JAVA

[JAVA] 자바_sort (2) - VO의 특정 값으로 List 정렬하기 ( feat.Comparator )

by 썸머워즈 2020. 2. 23.
반응형

- ArrayList<VO> 형태의 객체 정렬하기 -


일반적으로 List 형식의 객체를 사용할때 VO를 담아서 사용하는 경우가 많은데,

List의 값을 정렬하고자 할 때 안에 담긴 VO의 특정 값을 기준으로 정렬하는 방법에 대해 알아보자.

 

우선 직접적인 예제 코드에 들어가기에 앞서 몇가지 정의해두고 시작하자.


VO (예제에 사용될 VO)

public class MineVO {
    private int testInt = 0;
    private String testString = null;

    public int getTestInt() {
        return testInt;
    }

    public void setTestInt(int testInt) {
        this.testInt = testInt;
    }

    public String getTestString() {
        return testString;
    }

    public void setTestString(String testString) {
        this.testString = testString;
    }
}

이제 이 VO를 담고있는 List 객체를 정렬시켜줘야 하는데,

여기서는 당연하게도 Collections.sort() 를 사용한다.

 

VO 기반의 Collections.sort 사용법

ArrayList<MineVO> testList = new ArrayList<>();
Collections.sort(testList, new ListComparator());

 

여기서 이제 우리가 알아가야 할 부분은 ListComparator() 라고 선언해준 부분인데

해당 클래스는 직접 생성한 클래스이며 자세히 알아보자.

public class ListComparator implements Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
}

해당 클래스에 Comparator를 implements하여 사용하여 compare를 Override를 해준다음 사용해주면 된다.

compare 함수를 사용하여 특정 value값 또는 특정 기준으로 정렬이 가능하게 되는 것이다.

 

이제 어느정도 지식을 쌓았으니 예제코드로 접근해보자.


예제 1) String 값 기준으로 정렬하기

public class ListComparator implements Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        String testString1 = ((MineVO)o1).getTestString();
        String testString2 = ((MineVO)o2).getTestString();
        return testString1.compareTo(testString2);
    }
    
}

 

예제 2) int 값 기준으로 정렬하기

public class ListComparator implements Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        int testint1 = ((MineVO)o1).getTestInt();
        int testint2 = ((MineVO)o2).getTestInt();
        
        if(testint1 > testint2){
            return 1;
        }else if(testint1 < testint2){
            return -1;
        }else{
            return 0;
        }
        
    }
}

 

숫자형식의 경우는 크거나, 작거나, 같은 경우의 반환해주는 값으로 설정해주어 정렬시킨다.

 

예제 3) 정렬에 사용되는 VO에서 직접적으로 값을 꺼내 사용하기

public class ListComparator implements Comparator<MineVO> {

    @Override
    public int compare(MineVO o1, MineVO o2) {
        int testint1 = o1.getTestInt();
        int testint2 = o2.getTestInt();

        if(testint1 > testint2){
            return 1;
        }else if(testint1 < testint2){
            return -1;
        }else{
            return 0;
        }

    }
}
반응형


댓글

TOP