728x90
Stream sorted 메서드는 무엇인가?
Stream을 정렬할 때 사용하는 Stream 의 중간연산자이며, 오름차순이 아닌 다른 방식으로 정렬할 땐 Comparator 또는 Comparable을 사용해서 정렬 형식을 지정해준다.
Stream sorted 사용 예시
우선 다음과 같은 학생 객체가 있다고 가정해보자. 각 학생마다 이름과 성적이 주어진다.
List<Student> students = new ArrayList<Student>();
students.add(new Student("이정규", 80));
students.add(new Student("김정규", 70));
students.add(new Student("박정규", 60));
students.add(new Student("독고정규", 60));
students.add(new Student("제갈정규", 70));
students.add(new Student("유정규", 80));
이 학생 List를 Stream sorted 메서드를 통해서 이름 별로 오름차순 정렬해보자.
students = students.stream()
.sorted(Comparator.comparing(Student::getScore))
.collect(Collectors.toList());
그렇다면 결과는 다음과 같다.
[name=박정규, score=60]
[name=독고정규, score=60]
[name=김정규, score=70]
[name=제갈정규, score=70]
[name=이정규, score=80]
[name=유정규, score=80]
다음으로 .reversed()를 추가하여 이름 별로 내림차순 정렬을 해보자.
students = students.stream()
.sorted(Comparator.comparing(Student::getScore).reversed())
.collect(Collectors.toList());
그 결과 이름을 기준으로 내림차순으로 정렬된 것을 확인할 수 있다.
[name=이정규, score=80]
[name=유정규, score=80]
[name=김정규, score=70]
[name=제갈정규, score=70]
[name=박정규, score=60]
[name=독고정규, score=60]
그렇다면 score를 기준으로 내림차순 정렬을 하고, 점수가 같다면 이름을 기준으로 오름차순 정렬을 해보자. 이는 복잡해 보이지만, Stream sorted메서드와 thenComparing()을 사용하면 직관적인 코드로 손쉽게 정렬할 수 있다.
students = students.stream()
.sorted(Comparator.comparing(Student::getScore).reversed()
.thenComparing(Comparator.comparing(Student::getName)))
.collect(Collectors.toList());
그 결과는 다음과 같다.
[name=유정규, score=80]
[name=이정규, score=80]
[name=김정규, score=70]
[name=제갈정규, score=70]
[name=독고정규, score=60]
[name=박정규, score=60]
'Java' 카테고리의 다른 글
Mockito란 무엇인가? (0) | 2023.03.02 |
---|---|
JUnit5란 무엇인가? (0) | 2023.03.01 |
<JAVA> Stream Map메서드 (0) | 2023.01.23 |
<Java> Stream Filter 메서드 (0) | 2023.01.21 |
JAVA Stream (0) | 2023.01.20 |