반응형

List에서 특정값이 중복되는 Model을 제거하고 frlndSn을 값으로 정렬을 해야 하는 상황이 발생하여 나름 중복 제거 및 List 정렬한 소스 포스팅해볼게요.

 

중복 제거가 여러 가지 방법이 있겠지만 전 MAP을 이용했어요. key가 중복되면 마지막 값으로 계속 덮어버리니 마지막 남은 값만 유지가 되어 중복되는 key가 날아가도록 했어요.

List를 담을 때 frlndSn(일련번호)를 주어 순서대로 담았는데 Map을 거치면서 이 순서가 섞이는 거 같아요 List를 출력하니 add 한 순서대로 안 나오네요. 그래서 정렬도 했어요.

  for (ReqFundLivestockInfo reqFundLivestockInfo : reqFundBzobInfo.getReqFundLivestockInfoList()) {

      //같은 Value일경우 덮어버리기
      if (reqFundLivestockInfoMap.get(reqFundLivestockInfo.getValue()) != null) {

          ReqFundLivestockInfo tmpReqFundLivestockInfo = reqFundLivestockInfoMap.get(reqFundLivestockInfo.getValue());

          reqFundLivestockInfoMap.put(reqFundLivestockInfo.getValue(),reqFundLivestockInfo);
          
      } else {
      
          reqFundLivestockInfoMap.put(reqFundLivestockInfo.getValue(),reqFundLivestockInfo);         

      }

  }
	
    //map을 list로 변환
	ArrayList<ReqFundLivestockInfo> sortList = (ArrayList<ReqFundLivestockInfo>) reqFundLivestockInfoMap
							    .values().stream().collect(Collectors.toList());

	//일련번호 asc정렬
	Collections.sort(sortList, (arg0, arg1) -> {
    
		return arg0.getFrlndSn().compareTo(arg1.getFrlndSn());

	});

위 코드 실행결과 Value값이 중복된 Model은 Map에서 가장 마지막 Value만 남아있고 Map을 List로 변환 시 기존 List정렬순서가 섞이므로(왜 index순번이 바뀌는지는 모르겠습니다) sort를 이용하여 정렬을 다시 하였습니다.

예전 배울 때는 Bubble Sort방식으로 했었는데 간단하게 구현이 되네요.

Collections.sort말고 Arrays.sort도 있는데 이거는 배열 정렬에 사용되는거라 Collections.sort을 사용했어요

반응형

+ Recent posts