Java Stream Interface sorted

금암동 코딩왕·2024년 3월 21일
0

Java Stream Interface

목록 보기
3/3

Java Stream Interface의 sorted에 대해서 자세히 알아보자

sorted란 주어진 스트림의 요소를 오름차순 또는 내림차순으로 정렬하는데 사용한다. Comparator를 이용하며 정렬 방식을 사용자가 정의할 수 있다.

sorted의 내부 메서드

sorted()

기본적으로 스트림의 요소들을 오름차순으로 정렬한다. Comparable 인터페이스를 구현해야하고, 그렇지 않을 경우에는 ClassCastException이 발생할 수도 있다.

// 오름차순
stream.sorted();

sorted(Comparator<? super T> comparator)

이 메소드는 사용자가 제공한 Comparator를 사용하여 스트림의 요소들을 정렬한다. 이를 통해 사용자는 정렬 순서를 자유롭게 정의할 수 있는데, 예를 들어, 내림차순으로 정렬하거나, 객체의 특정 필드를 기준으로 정렬할 수 있다.

// 오름차순
stream.sorted(Comparator.comparing(ClassName::getFieldName));
// 내림차순
stream.sorted(Comparator.comparing(ClassName::getFieldName).reversed());

작동 원리

sorted 메소드는 내부적으로 스트림의 요소들을 모두 소비하여 정렬된 결과를 생성한다. 이는 스트림이 상태를 가지고 연산을 수행한다는 것을 의미한다. 즉, 전체 스트림을 메모리에 로드하고 정렬 프로세스를 완료해야 하므로, 매우 큰 데이터 세트에는 성능 이슈가 발생할 수 있으니 주의해야한다.

사용 시 고려 사항

sorted()는 종단 연산이 아니라 중간 연산이므로 정렬 작업 후에 다른 스트림 연산을 계속해서 체이닝할 수 있다. 정렬은 스트림의 모든 요소가 처리되어야 하므로, 특히 무한 스트림에서는 사용에 주의해야 한다.

스트림의 요소가 Comparable 인터페이스를 구현하지 않은 경우, 자연 순서를 사용하는 sorted() 메소드는 ClassCastException을 던질 수 있다. 대규모 데이터 세트에서는 메모리 사용량과 성능을 고려해야한다.

이렇게, sorted 메소드는 Java 스트림에서 매우 유용하게 사용될 수 있으나, 사용 시 요소의 유형, 데이터 크기 및 성능 요구 사항을 고려해 사용해야한다.

profile
헤이 헤이 궁금증과 타협하지 말자구!!

0개의 댓글