728x90
JAVA List model 데이터에서 특정 컬럼을 기준으로 중복되는 데이터를 합치고 싶을 때 사용
// 장바구니 상품 목록 조회
ScrtPrdInfrDto scrtPrdInVo = new ScrtPrdInfrDto();
scrtPrdInVo.setAnpMbrNo(mbrDto.getAnpMbrNo());
scrtPrdInVo.setAnpPrslTpCd("01");
List<ScrtPrdInfrDto> scrtPrdList = scrtService.getScrtPrdInfrList(scrtPrdInVo);
List<ScrtPrdInfrDto> scrtPrdList 값에서 getAnpDispMdclCd, getAnpDispMdclCdNm 두 개 컬럼을 기준으로 중복데이터를 합칩니다.
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class ScrtController {
public ModelAndView getScrtList(HttpServletRequest request) {
// 장바구니 상품 목록 조회
ScrtPrdInfrDto scrtPrdInVo = new ScrtPrdInfrDto();
scrtPrdInVo.setAnpMbrNo(mbrDto.getAnpMbrNo());
scrtPrdInVo.setAnpPrslTpCd("01");
List<ScrtPrdInfrDto> scrtPrdList = scrtService.getScrtPrdInfrList(scrtPrdInVo);
// 카테고리 distinct
List<ScrtPrdInfrDto> scrtCateList = scrtPrdList.stream()
.filter(distinctByKey(p -> p.getAnpDispMdclCd() + " " + p.getAnpDispMdclCdNm()))
.distinct()
.collect(Collectors.toList());
}
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor)
{
Map<Object, Boolean> map = new ConcurrentHashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
}
List<ScrtPrdInfrDto> scrtPrdList 값은 6개지만 List<ScrtPrdInfrDto> scrtCateList 값은 3개 입니다.
그리고 distinct 를 하면 list 의 순서가 바뀝니다. 그래서 다시 sort 를 해줘야 합니다.
.sorted((p1, p2) -> p1.getAnpDispMdclCd().compareTo(p2.getAnpDispMdclCd())) 는 getAnpDispMdclCd 값으로 asc 정렬을 합니다.
// 카테고리 distinct
List<ScrtPrdInfrDto> scrtCateList = scrtPrdList.stream()
.filter(distinctByKey(p -> p.getAnpDispMdclCd() + " " + p.getAnpDispMdclCdNm()))
.distinct()
.sorted((p1, p2) -> p1.getAnpDispMdclCd().compareTo(p2.getAnpDispMdclCd()))
.collect(Collectors.toList());
mav.addObject("scrtCateList", scrtCateList);
LIST
'Develop > JAVA' 카테고리의 다른 글
[Java] forEach 와 Stream API를 사용한 배열 처리 (9) | 2024.09.24 |
---|---|
[Spring Framework] Spring boot 2개 실행했을 때 로그인 세션 끊기는 현상 해결하기 (8) | 2024.09.14 |
[JAVA] QR코드 생성 후 서버에 이미지로 저장 (2) | 2024.08.30 |
[JAVA] List 를 Json String 으로 변환 (1) | 2024.08.27 |
[JAVA] List 형식의 Json string 을 Java List Model 로 파싱 (0) | 2024.08.26 |