본문 바로가기
  • 더 넓은 세상을 바라보고 또 나 자신을 바라보며 그렇게 간격을 좁혀나가보자.
  • 이 길에 끝에서 바라던 나와 마주칠 수 있다면 난 너를 가득 안아줄거야.
IT 스터디/자바(JAVA)

자바에 난무하는 compare의 정리

by Ryan Kim 2024. 11. 16.

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