Leeyebin의 블로그
[JAVA]VO 정렬하기 본문
제목은 무식하다 VO 정렬이라니 실은 나도 처음 생각없이 검색했었다.
정확히 말하면 LIST<VO> 를 VO의 특정 Value를 기준으로 정렬하는 법이렷다.
내가 만든화면은 사이트에서 제공하는 국가마다 도움말을 관리하는 화면인데 국가에 따라서 사용하는 사용하는 언어가 달라(호주:영어,한국어 / 베트남:영어,한국어, 베트남어 / 일본:영어,한국어,일본어 등) 언어정보들을 받아와야했다. 문제는 조회할때는 쿼리에서 ORDER BY로(이름순) 조회가 되어지는데 추가버튼을 누르면 공통팀에서 받은 언어코드를 받은 값들로 화면에서 조회된 테이블 바로밑에 추가되어지는데(아래 예) 이 공통코드가 순서가 맞지 않았다. 물론 기능에 문제가 있는건 아닌데 좀 거슬렸다.(지적당하진 않았지만 지적을 당할 거같은 문제)
예를 들어
기존데이터(ORDER BY들어간 조회 알파벳순) |
|
EN |
HELLO~ |
KR |
안녕하세요~ |
VI |
Xin chào |
새로 추가시(정렬이 되어있지않은채로 나옴) |
|
VI |
|
EN | |
KR |
이런 상황인데 문제는 추가할때 받아오는 값들이 정렬이 안되어있어서 문제가 되었었다. 공통코드라서 수정을 할 수 없는 상황이라 컨트롤러에서 받을때 내가 정렬을 해서 MAP에 넣어야겠다고 생각했다.
실제 코드를 좀 적을까하다가 바로 예시를 보이는게 나을거 같다.
컨트롤러단
List<outputVO> resultList = abcService.retrieveLangComboList(inputVO); //언어정보를 가져온다.(공통팀의 코드)
이렇게 서비스타고 결과 값들이 LIST에 담긴후 정렬하는 방법이다.
//비교하는 로직
public class NameComparator implements Comparator{
@Override
public int compare(Object o1, Object o2){
String en1 = ((outputVO)o1).getGlbLangCd();
String en2 = ((outputVO)o2).getGlbLangCd();
return en1.compareTo(en2);
}
}
}
위와같이 비교하는 로직을 짠다.(내가 소팅하고 싶은 기준은 outputVO안에 국가코드에 대한 정보가있는 GlbLangCd을 기준으로 알파벳순으로 정렬한다.)
컨트롤러단에
List<outputVO> resultList = abcService.retrieveLangComboList(inputVO);//언어정보를 가져온다.
Collections.sort(resultList, new NameComparator());//가져온 언어정보를 GlbLangCd의 value들을 기준으로 정렬한다.
이렇게 한줄만 추가해준다면 된다. 물론 Collections와 Comparator를 임포트 해줘야한다.(마법의 단축키 ctrl+shift+o)
import java.util.Collections;
import java.util.Comparator;
일단 이렇게 적어두고 좀더 다양한 예시를 들어 손을 봐야겠다.
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 객체지향 (0) | 2017.06.05 |
---|---|
[JAVA]SuppressWarnings (0) | 2017.05.22 |
[JAVA]코드 효율성 (0) | 2017.05.22 |
[JAVA] 파일 이름 변경하기 (0) | 2017.01.15 |
[JAVA]ArrayList, Array (0) | 2016.07.16 |