본문 바로가기
Language/Java

[Java]자바 Comparator로 객체정렬 기준정하기 사용법과 예제

by 시믈리에 2020. 9. 13.

Comparator


 

Comparator의 예로 과일을 예로 들어보겠다

public class Fruit {
	String name;
	int Sale;
	public Fruit(String name, int price) {
		this.name = name;
		this.Sale = Sale;
	}
	int getPrice() {
		return Sale;
	}
}

과일은 이름과 가격으로 정해져 있다

과일 이름과 가격은 강제적으로 설정을 해야 된다

        Comparator<Fruit> MaxPriceComparator = new Comparator<Fruit>() {
            @Override
            public int compare(Fruit o1, Fruit o2) {
                return o2.getPrice() - o1.getPrice();
            }
        };

커스텀마이즈 정렬을 만들었다 2개의 매개변수에 가격을 가져와 o2에서 o1를 뺀다 그럼 0 또는 -또는 +가 나온다 

그걸 Collections.sort()에서 알아서 정렬을 해준다 return o2.getPrice() - o1.getPrice(); 는 가격이 큰 순으로 정렬을 하지만

return o2.getPrice() - o1.getPrice() * -1;은 역수로 정렬 방식도 역으로 변경된다

이제 위에 있는 걸 활용해서 사용해보겠다

 

	public static void main(String[] args) {
        Comparator<Fruit> MaxPriceComparator = new Comparator<Fruit>() {
            @Override
            public int compare(Fruit o1, Fruit o2) {
                return o2.getPrice() - o1.getPrice();
            }
        };

        
        Fruit f1 = new Fruit("사과", 2000);
        Fruit f2 = new Fruit("수박", 10000);
        Fruit f3 = new Fruit("딸기" , 6000);
        List<Fruit> list = new ArrayList<Fruit>();
        list.add(f1);
        list.add(f2);
        list.add(f3);
        System.out.println("----------- 원본 -------------------");
        System.out.println(list);
        
        
        
        
        
        System.out.println("-----------------------커스텀마이즈로 정렬한후---------------------");
        Collections.sort(list, MaxPriceComparator);
        System.out.println(list);
        
        
	}

여기서 compare()에 들어가는 내용은 Collections.sort에서 자동으로 넣어준다고 생각하고 그것이 여러 번 반복되어 정렬이 된다 하면 쉽다

그럼 사과가 o1 수박이 o2에 들어닸을 때 결과는 10000 - 2000이기 때문에 양수가 나온다 이걸 보고 알아서 정렬을 해준다 정렬 후에는 출력 순서가 수박 - 딸기 - 사과이다

 

 

마무리


오늘 알아본 Comparator의 대해 알아봤다

언제 올라올진 몰라도 Comparable 사용법이 올라오면 수정하여 링크를 걸어드리도록 하겠습니다

Collections.sort(list)을 사용하면 컴파일 에러가 걸린다 왜냐하면 기준이 없기 때문이다 

우리는 커스텀마이즈를 함으로써 기준을 만들고 그 기준을 가지고 Collections.sort()가 정렬을 해주기 때문이다

결론 Comparator는 커스터마이즈 정렬에 사용된다

댓글