-> Comparator를 Override하여 정렬 기준 제시
-> 비교 기준이 같으면 입력의 순서대로 저장
-> 오름차순으로 정렬
해당 문제는 이차원 "문자열" 배열이므로 이 부분만 작성됨.
첫 번째 인덱스 값에 따라 정렬되고,
만약 첫 번째 인덱스 값이 동일한 경우에는 두 번째 있는 값을 비교하여 정렬시킨다.
Arrays.sort(배열, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
if(o1[0].toString().contentEquals(o2[0].toString()))
return o1[1].toString().compareTo(o2[1].toString());
else
return o1[0].toString().compareTo(o2[0].toString());
}
})
해설
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); //회원의 수
String arr[][] = new String[N][2]; //나이, 이름
for(int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = st.nextToken(); //나이
arr[i][1] = st.nextToken(); //이름
}
//나이가 같으면 먼저 가입한 순으로 정렬
Arrays.sort(arr, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]); //오름차순
}
});
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++){
sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
}
System.out.println(sb);
}
}
람다식으로 작성하면 위와 동일 문법 (Int인 경우)
Arrays.sort(arr, (o1, o2) -> o1[0] - o2[0]);