우선 먼저 알아야 할 개념에 대해서 정리한다.
공통점이라면 Comparable과 Comparator는 모두 인터페이스다.
즉, Comparable이나 Comparator를 사용하려 한다면 각 인터페이스 내에 구현된 메소드를 반드시 구현해야 한다는 것이다.
Comparable
Comparable 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있다.
Comparator
Comparator 인터페이스에는 많은 메소드가 선언되어 있지만, 이번에 사용할 메소드는 compare(T o1, T o2)를 사용한다.
양수일 경우 : Arrays.sort 정렬 알고리즘으로 위치를 바꿈.
0 이나 음수 : 두 객체의 위치가 바뀌지 않음.
구현
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
String[] arr = new String[N];
for(int i=0;i<N;i++){
arr[i] = br.readLine();
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//단어 길이가 같다면
if(o1.length()==o2.length()){
return o1.compareTo(o2); //사전순 정렬
}
else{
return o1.length()-o2.length(); //길이순 정렬
}
}
});
sb.append(arr[0]).append('\n');
for(int i=1;i<N;i++){
if(arr[i].equals(arr[i-1])){ //중복제거
continue;
}
sb.append(arr[i]).append('\n');
}
System.out.println(sb);
}
}
다음 오버라이딩 부분을 람다식으로 나타낼 수 있다.
Arrays.sort(arr,(o1,o2)->{
if(o1.length()==o2.length()){
return o1.compareTo(o2);
}
else{
return o1.length()-o2.length();
}
});