ArrayList<Integer[]> list = new ArrayList<>();
위와 같이 Integer[]
배열을 요소로 갖는 ArrayList
에서 배열의 첫 번째 요소를 기준으로 정렬하고자 한다.
Collections.sort() 사용
Comparator 선언으로 정렬
public static <T> void sort(List<T> list, Comparator<? super T> c)
첫 파라미터에는 정렬할 리스트를, 두 번째 파라미터에는 새로운 Comparator를 생성해 넣어준다.
Collections.sort(list, new Comparator<Integer[]>() {
@Override
public int compare(Integer[] o1, Integer[] o2) {
return o1[0] - o2[0];
}
});
int compare(T o1, T o2)
Comparator의 compare 메서드를 오버라이딩해 선언한다. Integer[] 배열을 파라미터로 받아 두 배열의 첫 번째 요소를 비교해 오름차순으로 반환하도록 하였다.
람다식으로 Comparator 생성을 대체
Collections.sort(list, (o1, o2) -> o1[0] - o2[0]);
Comparator.comparingInt
로 람다식을 대체
Collections.sort(list, Comparator.comparingInt(o -> o[0]));
List.sort() 사용
default void sort(Comparator<? super E> c)
java 1.8부터는 list에서도 sort 메서드를 지원한다. Collection.sort와 동일한 방식으로 Comparator를 적용한다.
list.sort(Comparator.comparingInt(o -> o[0]));
실행 확인
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
ArrayList<Integer[]> list = new ArrayList<>();
//list에 값 추가
for (int i = 0; i < N; i++) {
list.add(new Integer[]{Integer.parseInt(br.readLine()), i});
}
//정렬
list.sort(Comparator.comparingInt(o -> o[0]));
//정렬 결과 확인
for (Integer[] integers : list) {
System.out.println(Arrays.toString(integers));
}
정렬 기준 인덱스 변경
• 리스트의 배열 인덱스 0을 기준으로 정렬하고자 해서 o[0]
과 같이 사용하였다. 다른 인덱스를 기준으로 정렬을 원할 경우 []
안의 값을 바꿔준다.
내림차순 정렬을 원할 경우
• 내림차순 정렬을 원할 경우 sort
메서드가 사용된 코드 부분을 다음과 같이 수정한다.
list.sort((o1, o2) -> o2[0] - o1[0]);
ref.
'p-languages > java' 카테고리의 다른 글
java/ Integer를 '==' 연산자가 아닌 'equals' 메서드로 비교해야 하는 이유 (Integer Cache) (0) | 2022.11.11 |
---|---|
java/ 8 또는 12 길이의 int 배열을 받아 전화번호 형식의 String으로 반환하기 (0) | 2022.06.06 |
java/ 내부 클래스의 종류와 내부 클래스를 사용함으로써 얻는 장점 (0) | 2022.05.23 |
java/ Stream 중간 처리 메서드 - filtering, mapping, sorting, looping (0) | 2022.05.23 |
java/ String.contains() : 문자열에 특정 부분 문자열이 있는지 확인하는 메서드 (0) | 2022.05.17 |