Leeyebin의 블로그

[JAVA]VO 정렬하기 본문

프로그래밍/JAVA

[JAVA]VO 정렬하기

안되면될때까지 2017. 1. 3. 01:03

제목은 무식하다 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
Comments