티스토리 뷰
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());
참고
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] java.awt.Image를 BufferedImage로 변환하는 방법 (0) | 2020.04.29 |
---|---|
[Java] 동일 Application 중복 실행 체크하는 방법 (0) | 2020.04.12 |
[Java] 코드(프로그램 내부)에서 외부 JAR 파일 실행시키는 방법 (0) | 2020.03.22 |
(Java) 중복하지 않도록, 중복 없이 난수(Random Number) 생성하는 방법 (1) | 2020.03.07 |
(Java) JVM 이해하기 - 더 자바, 코드를 조작하는 다양한 방법 (0) | 2020.03.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 인텔리제이
- TableView
- 이펙티브 자바
- springboot
- 배낭 여행
- 스프링부트
- 일본 여행
- 일본 자전거 여행
- JavaFX
- git
- 텐트
- Java UI
- 이펙티브
- 자바
- 이펙티브자바
- effective java
- 일본여행
- 자전거
- intelij
- effectivejava
- 방통대 과제물
- JavaFX Window Close
- java
- 배낭여행
- windows
- JavaFX 종료
- 자전거 여행
- JavaFX Table View
- 일본 배낭여행
- JavaFX 테이블뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함