List로 받아온 값 중 특정 key값을 기준으로 중복 삭제 기능을 할 수 있는 유용한 코드
[사용법]
1) DeduplicationUtils.java 파일 생성
2) DeduplicationUtils.java 파일에 package 경로 적용
3) 기존 리스트 조회
4) 기존 리스트와 같은 객체를 사용하는 리스트 생성
5) 4의 새로운 리스트에 아래 적용법 사용
List<기존list객채> newList = DeduplicationUtils.deduplication(기존리스트이름, 객체명::get키값);
package 패키지 경로;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @param list 중복이 있는 lsit
* @param key 중복 여부를 판단하는 키값
* @param<T> generic type
* @return list
* @desc list<Object> 특정 값 기준 중복 제거
*/
public class DeduplicationUtils {
public static <T> List<T> deduplication(final List<T> list, Function<? super T,?> key){
return list.stream().filter(deduplication(key))
.collect(Collectors.toList());
}
private static <T> Predicate<T> deduplication(Function<? super T,?> key){
final Set<Object> set = ConcurrentHashMap.newKeySet();
return predicate -> set.add(key.apply(predicate));
}
}
// 게시판의 게시물 리스트를 조회한다
List<BrdArticleListItemVO> atclList = articleService.selectArticleList(listVO);
// 앨범형 - 게시물에 2개 이상의 사진이 들어갈 때 사진 수만큼 게시글 나옴
if ("A".equals(listVO.getParam().getListType())) {
List<BrdArticleListItemVO> deduplicationList = DeduplicationUtils.deduplication(atclList, BrdArticleListItemVO::getAtclId);
listVO.setAtclList(deduplicationList);
} else {
listVO.setAtclList(atclList);
}
[사용 전]
▶ 사진의 개수만큼 게시물이 나오고 있음
[사용 후]
▶ 사진의 개수에 상관없이 게시물은 1개만 노출됨(어떤 게시물이 노출되게 할지는 추가 조건에 따라 달라질 수 있음)