Integer.compare, Comparator.comparing 등 여러 비교 관련 메소드와 Arrays.sort, Collections.sort, Stream.sorted 등의 정렬 메소드를 함께 요약
사용 기준 요약
메소드사용 대상주 용도예시 사용법
Integer.compare | 기본 자료형 int, double 등 | 두 숫자 비교 | Integer.compare(a, b) |
Comparator.comparing | 객체와 객체 필드 | 객체의 특정 필드에 따라 정렬 | Comparator.comparing(Person::getAge) |
Comparator.reverseOrder() | Comparable 구현 클래스 | 내림차순 정렬 | Comparator.reverseOrder() |
Comparator.naturalOrder() | Comparable 구현 클래스 | 기본 정렬 순서 | Comparator.naturalOrder() |
Comparator 커스텀 (람다) | 복잡한 커스텀 로직 | 특정 맞춤 정렬 방식 | (a, b) -> a.concat(b).compareTo(b.concat(a)) |
1. Integer.compare (또는 Double.compare, Long.compare 등)
사용 상황:
- 두 개의 원시 타입(int, double, long) 값을 비교할 때 사용.
- Comparator를 따로 정의할 필요 없이, 숫자 값 자체를 비교하고 싶을 때.
특징:
- 기본 자료형의 비교를 위해 간결하게 쓸 수 있다.
- 결과값은 1(작음), 0(같음), 1(큼)으로 나와, 비교 연산을 수행할 수 있다.
예시:
int result = Integer.compare(5, 3); // 5가 크므로 1 반환
int result2 = Integer.compare(3, 3); // 같으므로 0 반환
2. Comparator.comparing
사용 상황:
- 객체의 특정 필드에 따라 정렬해야 할 때 사용.
- 주로 객체 리스트의 특정 필드를 기준으로 정렬할 때 유용하다. 예를 들어 Person 객체의 나이, 이름 등을 기준으로 정렬할 때.
- thenComparing과 함께 사용하면 다중 정렬 기준을 지정할 수 있다.
특징:
- 람다를 통해 객체의 필드에 쉽게 접근해 정렬 기준을 만들 수 있다.
- Comparator를 반환하므로 Arrays.sort, Collections.sort 등에서 바로 사용 가능.
예시:
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));
people.sort(Comparator.comparing(Person::getAge)); // 나이 기준 오름차순 정렬
3. Comparator.reverseOrder()와 Comparator.naturalOrder()
사용 상황:
- 리스트나 배열을 정렬할 때 기본 정렬 방식을 지정하거나, 반대로 내림차순으로 정렬할 때 사용.
- reverseOrder()는 내림차순 정렬, naturalOrder()는 기본 정렬 방식(오름차순)을 지정
특징:
- 코드가 간결하고 가독성이 좋다.
- String, Integer 같은 기본 자료형 래퍼 클래스, Comparable을 구현한 클래스에서 사용할 수 있다.
예시:
java
코드 복사
List<String> words = Arrays.asList("banana", "apple", "grape");
words.sort(Comparator.reverseOrder()); // 사전순의 반대, 즉 내림차순
4. Comparator 커스텀 정의 (람다 표현식 사용)
사용 상황:
- 두 객체 간 비교 로직이 특별하거나 복잡할 때.
- 기존 메소드(compare, comparing, reverseOrder 등)로 표현하기 어려운 비교 방식을 만들어야 할 때.
특징:
- 람다식으로 작성해 특정 요구에 맞는 커스텀 정렬 기준을 자유롭게 정의할 수 있다.
- 복잡한 다중 기준 정렬, 사용자 정의 기준이 필요한 경우 적합.
예시:
java
코드 복사
String[] numbers = {"30", "3", "34"};
Arrays.sort(numbers, (s1, s2) -> (s2 + s1).compareTo(s1 + s2)); // 큰 숫자가 앞에 오도록 조합
사용 기준 요약
메소드사용 대상주 용도예시 사용법
Integer.compare | 기본 자료형 int, double 등 | 두 숫자 비교 | Integer.compare(a, b) |
Comparator.comparing | 객체와 객체 필드 | 객체의 특정 필드에 따라 정렬 | Comparator.comparing(Person::getAge) |
Comparator.reverseOrder() | Comparable 구현 클래스 | 내림차순 정렬 | Comparator.reverseOrder() |
Comparator.naturalOrder() | Comparable 구현 클래스 | 기본 정렬 순서 | Comparator.naturalOrder() |
Comparator 커스텀 (람다) | 복잡한 커스텀 로직 | 특정 맞춤 정렬 방식 | (a, b) -> a.concat(b).compareTo(b.concat(a)) |
'IT 스터디 > 자바(JAVA)' 카테고리의 다른 글
자바의 sort를 정리 (0) | 2024.11.16 |
---|---|
Java 문자 입력 (1) | 2016.04.06 |
DecimalFormat 클래스 (0) | 2016.02.14 |
BigIntger 클래스 (0) | 2016.02.14 |
BigInteger 사용하기 (0) | 2016.02.14 |