Java Array Sort
자바에서 1차원 배열을 오름차순 하기위해서는 Arrays.sort() 메서드에 인자로 배열을 넣어서 사용하면 되지만,
2차원 배열을 오름차순 하려면 Arrays.sort에서 람다식을 이용하여 구현할 수 있다.
1차원 배열(int) 정렬 - 오름차순, 내림차순
여기서 잠깐 1차원 배열(정수형) 오름차순, 내림차순 정렬하는 방법에 대해 코드로 간단히 알아보자.
# 오름차순 정렬
int[] arr = {1, 26, 17, 25, 99, 44, 303};
Arrays.sort(arr);
>>>>>결과: [1, 17, 25, 26, 44, 99, 303]
1차원 int형 배열의 오름차순 정렬은 비교적 간단하지만, 내림차순 정렬은 상당히 까다롭다.
int형 배열이 아니라면, 아래와 같이 Arrays.sort의 두번째 인자에 Collections의 reverseOrder()메서드를 사용하면 되지만,
Arrays.sort("배열 명", Collections.reverseOrder());
int형 배열이라면, int가 Object 타입이 아닌, 기본형 타입(primitive type)이기 때문에 Object를 상속한 클래스에 대해서 사용가능한 인터페이스인 Collections를 사용할 수 없다.
따라서 int형 배열을 Object를 상속하는 Wrapper 클래스로 박싱해주어야 역순정렬이 가능해진다.
// int형 배열 내림차순 정렬
int[] arr = {1, 26, 17, 25, 99, 44, 303};
Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new); //박싱
Arrays.sort(arr2, Collections.reverseOrder());
2차원 배열(int) 정렬 - 오름차순, 내림차순
그렇다면 2차원 배열(int형) 정렬은 어떻게 하는 것일까?
Comparator 익명 클래스 구현, Lambda(람다식), Comparator.comparing()등을 사용한 여러 방법이 있지만,
이 포스팅에서는 람다식을 사용한 방법을 알아보겠다.
오름차순 정렬
방법은 간단하다.
Arrays.sort()를 사용하는데 인자에 람다식을 이용한다.
예시
int[][] arr = new int[][]{{5,40},{3,50},{1,30},{4,20},{2,10}};
// 2. Lambda 사용 - Java 8이상
Arrays.sort(arr, (o1, o2) -> {
return Integer.compare(o1[0], o2[0]);
});
>>>>>>>>결과: {1,30}, {2,10}, {3,50}, {4,20}, {5,40}
이것을 이용하여서 0번째 인자가 같을 때, 1번째 인자로 오름차순 하는 법도 알아보겠다.
예시
int[][] arr = new int[][]{{5,50},{5,40},{1,30},{4,20},{2,10}};
// 2차원 배열 오름차순 정렬
Arrays.sort(arr, (o1, o2) -> {
//0번째 요소가 같을땐 1번째 요소로 오름차순
if(o1[0]==o2[0]) return Integer.compare(o1[1], o2[1]);
//다를땐 0번째 요소로 오름차순
else return Integer.compare(o1[0], o2[0]);
});
>>>>결과 : {1,30},{2,10},{4,20},{5,40},{5,50}
내림차순 정렬
내림차순 정렬도 간단하다.(결과는 생략하겠다)
예시
// 내림차순 정렬
int[][] arr = new int[][]{{5,40},{3,50},{1,30},{4,20},{2,10}};
// 2. Lambda 사용 - Java 8이상
Arrays.sort(arr, (o1, o2) -> {
if(o1[0] == o2[0]) return Integer.compare(o2[1], o1[1]);
else return Integer.compare(o2[0], o1[0]);
});
'Languages | Frameworks > Java' 카테고리의 다른 글
Java) HashMap의 computeIfAbsent에 대해(feat. getOrDefault) (0) | 2023.01.27 |
---|---|
Java) List와 ArrayList의 차이? (0) | 2022.11.08 |
JPA, JPQL (0) | 2022.09.27 |
암호화 알고리즘 종류와 추천(SHA, PBKDF2, Bcrypt) + Java 적용 샘플 (0) | 2022.07.18 |
게시판 글이 중간에 삭제시 > 번호 초기화후 인덱싱 하는 방법 (0) | 2022.07.13 |