Arrays.sort(arr, Comparator.comparingInt(a -> a[0]));
Arrays.sort(arr, Comparator.comparingInt((int[] a) -> a[0]).reversed());
Arrays.sort(arr,
Comparator.comparingInt((int[] a) -> a[0])
.thenComparingInt(a -> a[1])
);
Arrays.sort(arr,
Comparator.comparingInt((int[] a) -> a[0])
.thenComparingInt(a -> -a[1]) // 값 범위 작을 때만
);
// 안전 버전
Arrays.sort(arr,
Comparator.comparingInt((int[] a) -> a[0])
.thenComparing((a, b) -> Integer.compare(b[1], a[1]))
);
int k = 2; // 0-based index
Arrays.sort(arr, Comparator.comparingInt(a -> a[k]));
Arrays.sort(arr, (a, b) -> {
int lenCmp = Integer.compare(a.length, b.length);
if (lenCmp != 0) return lenCmp;
return Integer.compare(a[0], b[0]);
});
Arrays.sort(arr, (a, b) -> {
// 1순위: a[0] 오름
int c = Integer.compare(a[0], b[0]);
if (c != 0) return c;
// 2순위: a[1] 내림
c = Integer.compare(b[1], a[1]);
if (c != 0) return c;
// 3순위: a[2] 오름
return Integer.compare(a[2], b[2]);
});
❌ 이렇게 하지 말 것:
Arrays.sort(arr, (a, b) -> Arrays.toString(a).compareTo(Arrays.toString(b)));
느리고 의미도 애매함.
Arrays.sort(wires, Comparator.comparingInt(a -> a[0]));
Arrays.sort(meetings,
Comparator.comparingInt((int[] a) -> a[1]) // 종료 시간
.thenComparingInt(a -> a[0]) // 시작 시간
);
Arrays.sort(points,
Comparator.comparingInt((int[] a) -> a[0])
.thenComparingInt(a -> a[1])
);
PriorityQueue<int[]> pq =
new PriorityQueue<>((a, b) -> {
int c = Integer.compare(b[0], a[0]); // 1열 내림
if (c != 0) return c;
return Integer.compare(a[1], b[1]); // 2열 오름
});
a - b 금지Comparator.comparingInt 우선 사용thenComparingIntreversed() 또는 Integer.compare(b, a)Arrays.sort(arr, Comparator.comparingInt(a -> a[0]));
Arrays.sort(arr, Comparator.comparingInt((int[] a) -> a[0]).thenComparingInt(a -> a[1]));
Arrays.sort(arr, Comparator.comparingInt((int[] a) -> a[k]));