반응형
- 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;
}
}
}
반응형
댓글