본문 바로가기
▶ Back-End/Java

List<Object> 정렬

by 오늘도 코딩 2021. 4. 16.
728x90
반응형

 

 

▷ Example

 

*개선 2024-11-26

public static void testSort() {
    // 테스트 데이터 생성
    var list = new ArrayList<>(List.of(
        new DistVO("짱구분식", 11),
        new DistVO("홍길동분식", 5),
        new DistVO("김길동분식", 5),
        new DistVO("십이분식", 34),
        new DistVO("저먼분식", 94)
    ));

    // 정렬 전 출력
    System.out.println("정렬 전 ====================");
    list.forEach(System.out::println);

    // 거리순으로 정렬(오름차순 ASC)
    list.sort(Comparator.comparingInt(DistVO::getDist));

    // 정렬 후 출력 (오름차순)
    System.out.println("오름차순 정렬 후 ====================");
    list.forEach(System.out::println);

    // 거리순으로 정렬(내림차순 DESC)
    list.sort(Comparator.comparingInt(DistVO::getDist).reversed());

    // 정렬 후 출력 (내림차순)
    System.out.println("내림차순 정렬 후 ====================");
    list.forEach(System.out::println);
}


정렬 전 ====================
DistVO(dist=11, name=짱구분식)
DistVO(dist=5, name=홍길동분식)
DistVO(dist=5, name=김길동분식)
DistVO(dist=34, name=십이분식)
DistVO(dist=94, name=저먼분식)

오름차순 정렬 후 ====================
DistVO(dist=5, name=홍길동분식)
DistVO(dist=5, name=김길동분식)
DistVO(dist=11, name=짱구분식)
DistVO(dist=34, name=십이분식)
DistVO(dist=94, name=저먼분식)

내림차순 정렬 후 ====================
DistVO(dist=94, name=저먼분식)
DistVO(dist=34, name=십이분식)
DistVO(dist=11, name=짱구분식)
DistVO(dist=5, name=홍길동분식)
DistVO(dist=5, name=김길동분식)

 

*개선 전

public static void testSort() {

        // 테스트 데이터 생성
        List<DistVO> list = new ArrayList<DistVO>();
        DistVO vo;
        
        vo = new DistVO();
        vo.setName("짱구분식");
        vo.setDist(11);
        list.add(vo);
        
        vo = new DistVO();
        vo.setName("홍길동분식");
        vo.setDist(5);
        list.add(vo);
        
        vo = new DistVO();
        vo.setName("김길동분식");
        vo.setDist(5);
        list.add(vo);
        
        vo = new DistVO();
        vo.setName("십이분식");
        vo.setDist(34);
        list.add(vo);
        
        vo = new DistVO();
        vo.setName("저먼분식");
        vo.setDist(94);
        list.add(vo);
        
        // 정렬 전 출력
        System.out.println("정렬 전 ====================");
        for(DistVO data : list){
            System.out.println(data);
        }
        System.out.println("정렬 전 ====================");

        // 거리순으로 정렬(가까운 순 오름차순 ASC) 
        Comparator<DistVO> cp = new Comparator<DistVO>() {
            @Override
            public int compare(DistVO data1, DistVO data2){
                int a = data1.getDist();
                int b = data2.getDist();
                
                /*
                    [내림차순 DESC] a > b = -1                    
                    DistVO(dist=94, name=저먼분식)
                    DistVO(dist=34, name=십이분식)
                    DistVO(dist=11, name=짱구분식)
                    DistVO(dist=5, name=홍길동분식)
                    DistVO(dist=5, name=김길동분식)
    
                    [오름차순 ASC] a > b = 1
                    DistVO(dist=5, name=김길동분식)
                    DistVO(dist=5, name=홍길동분식)
                    DistVO(dist=11, name=짱구분식)
                    DistVO(dist=34, name=십이분식)
                    DistVO(dist=94, name=저먼분식)
                 */
                if(a > b) {
                    return 1;
                } else {
                    return -1;
                }
            }
        };
        // 정렬
        Collections.sort(list, cp);

        // 정렬 후 출력
        System.out.println("정렬 후 ====================");
        for(DistVO data : list){
            System.out.println(data);
        }
        System.out.println("정렬 후 ====================");
    }
    
    /**
    	결과 :
            정렬 전 ====================
            DistVO(dist=11, name=짱구분식)
            DistVO(dist=5, name=홍길동분식)
            DistVO(dist=5, name=김길동분식)
            DistVO(dist=34, name=십이분식)
            DistVO(dist=94, name=저먼분식)
            정렬 전 ====================
            정렬 후 ====================
            DistVO(dist=5, name=김길동분식)
            DistVO(dist=5, name=홍길동분식)
            DistVO(dist=11, name=짱구분식)
            DistVO(dist=34, name=십이분식)
            DistVO(dist=94, name=저먼분식)
            정렬 후 ====================
    */

 

 

728x90
728x90

댓글