DevelopmentTools/Java

[java] Collections.sort override

수짱수짱 2023. 2. 10. 02:27

구름 알고리즘 먼데이 2주차 3번 문제를 해결하며

java 답안은 제공이 되지않아 구글링을 하며 다른 분들의 코드를 참고하여 풀었다. 그러던중 다른 분의 코드를 보게되었다.

외부 클래스를 생성하고 새로운 클래스가 생겼으므로 Collections.sort 메소드를 오버라이드하여 새로운 정렬 메소드를 정의하는 방법을 보게 되었다.

 

람다식을 이용하여 해결하셨는데 기억에 꼭 남기고 싶어서 벨로그에 작성하게 되었다.


Collections.sort(list, comparator);

comparable은 this를 기준으로 비교하지만 comparator은 비교 대상을 2개로 두고 비교한다.

int compareTo(T op1, T op2)로 두 객체의 특정값을 연산해서 음수라면 op1가 작은 것, 양수라면 op1가 큰 것

 

이를 이용하여 오버라이딩 한 코드는 아래와 같다.

Collections.sort(attendances, (p1, p2)->{ 
			if(p1.name.equals(p2.name)){ // 이름이 같다면
				if(p1.height > p2.height){ // p1의 키가 크다면 양수
					return 1;
				}
				else return -1; // p1의 키가 작다면 음수
			}
			else{
				return p1.name.compareTo(p2.name); // 이름이 다르다면 이름이 큰 것으로
			}
		});

 

만약, 람다식을 사용하지 않는다면 아래와 같이 오버라이딩 할 수 있다.

Collections.sort(list, new Comparator<T>() {	
	@Override	
    public int compare(T op1, T op2){
    	return op1.val - op2.val;
    }
});

람다식을 사용함에 따라 코드 가독성이 높아지고 간결해지는 것을 알 수 있다.


Reference

velog 작성일: 2022년 10월 18일