반응형
스트림에서는 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() 메서드를 이용해
객체 리스트를 오름차순 또는 내림차순으로 정렬하는 방법을 실습해보았습니다.
정렬 기준을 정의하고 스트림에 적용하면,
보다 유연하게 데이터를 가공하고 출력할 수 있는 구조를 만들 수 있습니다.
'Java > 자바 정리' 카테고리의 다른 글
175. 스트림 요소 조건 검사 – allMatch, anyMatch, noneMatch (0) | 2025.05.26 |
---|---|
174. 스트림에서 중간 연산 출력 – peek()과 forEach()의 차이 (0) | 2025.05.26 |
173. sorted()에 직접 비교식 넣기 – 사용자 지정 정렬 구현하기 (0) | 2025.05.26 |
171. flatMap()과 flatMapToInt() – 다차원 데이터를 평면화하기 (0) | 2025.05.26 |
170. asDoubleStream()과 boxed() – 기본형 스트림 변환하기 (1) | 2025.05.26 |
169. mapToInt()를 이용한 필드 추출 – 점수만 뽑아서 출력하기 (0) | 2025.05.26 |