728x90
Comparable과 Comparator를 활용해서 상품목록 정렬하기
Comparable과 Comparator의 차이점
Comparable은 String이나 Integer의 데이터를 특정 조건으로 정렬하고 싶을 때 사용한다
출력할 때 Collections.sort(목록) method를 이용한다.
Comparator는 기존 정렬에서 내가 원하는 대로 특정 조건을 더 추가하여 다르게 정렬하고 싶을 때 사용한다
출력할 때 Collections.sort(목록,comparator별칭) method를 이용한다.
1) Controller
@Controller
public class ProductListController {
@Autowired
private ProductDaoInter Inter;
@RequestMapping("productListSort")
public ModelAndView processSort(ModelAndView view, HttpServletRequest request,
@RequestParam("order_by")String order_by) {
//page처리
...
//정렬기준 처리
ProductComparator com = new ProductComparator();
com.order_by = order_by;
Collections.sort(list,com);
ArrayList<ProductDto> result = getListData(list, page);
view.addObject("data",result);
view.setViewName("productList");
return view;
}
정렬부분만 보면,
//정렬기준 처리
ProductComparator com = new ProductComparator();
com.order_by = order_by;
Collections.sort(list,com);
새로운 ProductComparator 객체 com을 만들고 com 안에 order_by 정렬조건을 넣어준다.
Collections.sort는 정렬하는 클래스이다. Collections.sort(목록,comparator별칭)의 형식으로 써준다.
1) DTO
public class ProductDto implements Comparable<ProductDto>{
private String user_id,...; //생략
private int product_id,...;
@Override
public int compareTo(ProductDto o) {
return 0;
}
// 아래에는 getter,setter 생략
DTO 스스로를 정렬을 하나씩 비교할 수 있도록 Java의 기본 클래스인 Comparable을 implement 해준다. 그리고 부모 클래스 Comparable의 compareTo() 메소드를 Override 해준다.
3) Comparator
import java.util.Comparator;
public class ProductComparator implements Comparator<ProductDto>{
public String order_by;
@Override
public int compare(ProductDto o1, ProductDto o2) {
if(order_by.equals("views desc")) {
if(o1.getViews() < o2.getViews()) {
return 1;
}return -1;
}else if(order_by.equals("interest_count desc")){
if(o1.getInterest_count() < o2.getInterest_count()) {
return 1;
}return -1;
}else if(order_by.equals("product_price desc")){
if(o1.getProduct_price() < o2.getProduct_price()) {
return 1;
}return -1;
}else{
if(o1.getProduct_price() > o2.getProduct_price()) {
return 1;
}return -1;
}
}
이 클래스에서 가격순/최신순/인기많은순 등 정렬조건들을 추가할 수 있다.
order_by String으로 어떤순으로 정렬할지 조건을 받아서 if 문으로 분류한 다음, 오름차순 또는 내림차순으로 정렬해준다.
ProductDto o1, ProductDto o2 로 두개를 정의해주고 DTO 자기자신 o1과 자기자신 o2를 서로 비교해서 정렬한다
4) productList.jsp
<th class="text-right" >
<!-- 상품 정렬 -->
<a href="productListSort?page=1&order_by=views desc">인기순</a> 
<a href="productList?page=1">최신순</a>
<a href="productListSort?page=1&order_by=interest_count desc">좋아요순</a>
<a href="productListSort?page=1&order_by=product_price desc">높은가격</a>
<a href="productListSort?page=1&order_by=product_price asc">낮은가격</a>
</th>
정렬은 끝났으니 사용자가 원하는 상품 정렬조건을 클릭할 수 있도록 a태그로 정렬기준을 담아 출력해준다.
728x90
'Programming > Spring' 카테고리의 다른 글
Spring / Spring Boot 차이점 / IoC(제어의 역전), DI(의존성 삽입), AOP(관점 지향 프로그래밍) (0) | 2021.03.31 |
---|
댓글