Java

<JAVA> Stream sorted 메서드

Mulenga 2023. 1. 24. 11:36
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