Java/자바 정리

172. 정렬 스트림 – sorted()와 reverseOrder()로 객체 정렬하기

코딩하는냥이 2025. 5. 26. 11:39
반응형

스트림에서는 sorted() 메서드를 이용해 데이터를 정렬하여 처리할 수 있습니다.
특히 객체에 Comparable 인터페이스가 구현되어 있다면,
자연 정렬 또는 역순 정렬을 통해 리스트의 요소를 손쉽게 정렬된 형태로 출력할 수 있습니다.
이번 예제에서는 Student 객체 리스트를 정렬해 출력해보겠습니다.


📦 Student.java

package ch17.sec06;

public class Student implements Comparable<Student> {
	private String name;
	private int score;

	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public int getScore() {
		return score;
	}

	@Override
	public int compareTo(Student s) {
		return Integer.compare(score, s.score);  // 점수 기준 오름차순 정렬
	}
}

📌 예제 코드

package ch17.sec06;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class SortingExample {
	public static void main(String[] args) {
		List<Student> list = new ArrayList<Student>();
		list.add(new Student("홍길동", 30));
		list.add(new Student("김자바", 10));
		list.add(new Student("파이썬", 20));

		// 오름차순 정렬
		list.stream()
			.sorted()
			.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
		System.out.println();

		// 내림차순 정렬
		list.stream()
			.sorted(Comparator.reverseOrder())
			.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
	}
}

💻 실행 결과

김자바: 10
파이썬: 20
홍길동: 30

홍길동: 30
파이썬: 20
김자바: 10

💬 코드 설명

  • Student 클래스는 Comparable<Student>을 구현하여
    compareTo() 메서드로 점수를 기준으로 오름차순 비교합니다.
  • sorted()는 기본적으로 compareTo() 기준으로 정렬합니다.
  • Comparator.reverseOrder()를 사용하면 내림차순으로 정렬할 수 있습니다.
  • forEach()를 통해 정렬된 학생 정보를 출력합니다.

💡 포인트 정리

  • Comparable<T>를 구현하면 sorted()로 자연 정렬(기본 정렬)이 가능합니다.
  • Integer.compare(a, b)는 a < b이면 음수, 같으면 0, 크면 양수를 반환합니다.
  • Comparator.reverseOrder()는 기본 정렬의 반대 방향으로 정렬합니다.
  • 정렬은 중간 연산이며, 최종 연산(forEach, collect 등) 전에만 적용됩니다.

📌정리하자면, 이번 예제에서는 Comparable 인터페이스와 sorted() 메서드를 이용해
객체 리스트를 오름차순 또는 내림차순으로 정렬하는 방법을 실습해보았습니다.
정렬 기준을 정의하고 스트림에 적용하면,
보다 유연하게 데이터를 가공하고 출력할 수 있는 구조를 만들 수 있습니다.