프로그래밍/JAVA
[Java] Java Stream 여러 필드 정렬(Sorting) 방법
rlawlstjd007
2020. 4. 10. 23:11
Java 8 – Sorting stream on multiple fields
- Java를 사용하면서 데이터 집합을 Sorting을 할 때 조건, 필드가 여러가지가 될 수가 있다.
- 이때 여러 필드를 비교 하는 방법을 알아보고자 한다.
방법
- 우선 실제 상황을 가정하고 설명을 하는 것이 좋을 것 같다.
- 아래와 같은 데이터 클래스가 있다고 가정을 해보자.
- 정렬은 1차적으로 dateTime으로 한뒤 만약 같다면 sequnceNumber로 정렬을 해야 한다고 가정
public class CustomData {
private ZonedDateTime dateTime;
private int sequnceNumber;
//getter, setter, 생성자 생략
}
필드 각각에 대한 comparators 생성
- 필드 각각에 대한 comparator를 생성 해준뒤 이들을 결합해주는 comparator를 생성하여 sort 조건에 넣어주는 방식이다.
//dateTime comparator
Comparator<CustomData> compareByDateTime = Comparator.comparing( CustomData::getDateTime );
//last sequenceNumber comparator
Comparator<CustomData> compareBySequenceNumber = Comparator.comparing( CustomData::getSequenceNumber );
//Compare by dateTime and then sequenceNumber (multiple fields)
Comparator<CustomData> compare = compareByDateTime.thenComparing(compareBySequenceNumber);
//Using Comparator - pseudo code
list.stream().sorted( compare ).collect();
스트림 내부에서 사용
- 위 예제와 동일한 원리의 코드를 사용한다.
- 개인적으로 좀더 심플한 것 같음
Comparator<CustomData> compare = Comparator
.comparing(CustomData::getDateTime)
.thenComparing(CustomData::getSequenceNumber);
List<CustomData> sortedList = list.stream()
.sorted(compare)
.collect(Collectors.toList());
참고
Java 8 - Sorting stream on multiple fields - Group by sort example
Java 8 example to sort stream of objects by multiple fields using comparators and Comparator.thenComparing() method. Java stream group by sort example.
howtodoinjava.com
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형