어레이 리스트를 sql 쿼리에서 처럼 그룹바이 하고 카운트 등을 하기 위한 코드 입니다.
어레이 리스트는
{아이디,이름,A}
{아이디,이름,A}
{아이디,이름,B}
{아이디,이름,B}
{아이디,이름,B}
이러한 식으로 된 리스트 받아서
{A,2}
{B,3}
을 반환하는 예제 입니다.
이하 자바소스
############################################################
/**
* 리스트 2 디스팅트_리스트
*
* @param List
* @return List
* @throws Exception
*/
public List getCenterDistinctList(List objList) throws Exception {
List issList = new ArrayList();
try{
HashMap objMap = new HashMap();
HashMap issMap = new HashMap();
int objListSize = objList.size();
//System.out.println("###############");
//System.out.println("##objListSize : "+ objListSize);
//System.out.println("###############");
String CENTER = ""; //센터코드
String CENTER2 = ""; //중복카운트 위함.
int TOTAL_WORK = 1;
int maxSeq = this.getCenterIssueMaxNum()+1; //센터현황 최대시퀀스값
for (int i=0 ; i<objListSize ; i++) { //배열은 0부터 시작. 리스트 사이즈 만큼 돌린다.
objMap = (HashMap) objList.get(i); //리스트에서 뽑아낸 오브젝트를 HashMap으로 캐스트.
issMap = new HashMap();
CENTER = (String)objMap.get("CENTER");
if ( CENTER.equals(CENTER2) ){ //현재 가져온 센터코드와 바로전 센터코드를 비교하여 중복이면 TRUE
TOTAL_WORK = TOTAL_WORK+1; //대상국소수를 증가한다.
issList.remove(issList.size()-1); //바로 전 해시맵 오브젝트를 지운다.
}else{ //현재 가져온 센터코드와 바로전 센터코드를 비교하여 중복이면 TRUE
TOTAL_WORK = 1; //국소수를 리셋한다.
}
issMap.put("CENTER", objMap.get("CENTER")); //현재의 해시맵 오브젝트를 추가한다.(센터코드))
issMap.put("TOTAL_WORK", TOTAL_WORK+""); //현재의 해시맵 오브젝트를 추가한다.(대상국소수)
issMap.put("ISSUE_SEQ", maxSeq+issList.size()+""); //시퀀스 뽑아내기
issList.add(issMap); //위에서 만든 해시맵 오브젝트를 리스트에 추가한다.
CENTER2 = (String)objMap.get("CENTER");
}
//System.out.println("###############");
//System.out.println("#getCenterDistinctList#");
//System.out.println(issList);
//System.out.println("###############");
}catch(Exception e){
e.printStackTrace();
}
return issList;
}