반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LogInterceptor
- vaultTemplate
- jpa
- Starter
- restTemple
- AccessLevel
- RestTemplate
- Spring Boot
- @AutoConfiguration
- JsonStringType
- Thread Safety
- AOP target
- ClientHttpRequestInterceptor
- Stream
- spring
- ResponseBodyAdvice
- findFirst
- AOP 매개변수
- Save Action
- findAny
- AOP
- gradle
- fotmatter
- java
- AOP this
- auto configuration
- 개방/폐쇄 원칙
- JsonType
- 포맷터
- 쓰레드 안전
Archives
- Today
- Total
맨땅에 헤딩하는 개바른자
[Java] Stream > sorted 본문
반응형
git
https://github.com/ymwoo88/stream/tree/feature/sorted-%EC%98%88%EC%A0%9C
설명
데이터가 순서대로 정렬된 Stream을 리턴하는 기능을 제공합니다.
데이터의 종류가 기본적으로 서로 비교할 수 없다면 어떤 식으로 비교할지를 알려주는 comparator을 인자로 제공해야 합니다.
sorted
Stream<T> sorted();
Stream<T> sorted(Comparator<? super T> comparator);
예제
- 샘플 데이터
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private Long id;
private String name;
private String email;
private Integer age;
private Boolean isWorking;
public static User getUserAmil() {
return User.builder()
.id(1L)
.name("amil")
.email("amil@ymwoo.com")
.age(28)
.isWorking(true)
.build();
}
public static User getUserBenny() {
return User.builder()
.id(2L)
.name("benny")
.email("benny@ymwoo.com")
.age(26)
.isWorking(true)
.build();
}
public static User getUserCho() {
return User.builder()
.id(3L)
.name("cho")
.email("cho@ymwoo.com")
.age(33)
.isWorking(false)
.build();
}
public static List<User> getExamUserList() {
return Arrays.asList(getUserAmil(), getUserCho(), getUserBenny());
}
- 예졔1) 오름차순
@Test
@DisplayName("나이순으로 오름차순")
void case1() {
List<User> examUserList = User.getExamUserList();
List<User> sortedUser = examUserList
.stream()
// user는 그냥 sort할수 없으므로 comparator을 제공해야 합니다.
// 이는 람다식으로 간단하게 제공할 수 있습니다.
// 아래 코드는 오름차순 방식이고 내림차순을 원한다면 u1과 u2의 순서를 바꾸면 됩니다.
.sorted(Comparator.comparing(User::getAge))
.toList();
// 결과 출력
sortedUser
.forEach(user -> log.info(">>> sortedUser User Info = {}", user));
}
16:40:08.064 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=2, name=benny, email=benny@ymwoo.com, age=26, isWorking=true)
16:40:08.073 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=1, name=amil, email=amil@ymwoo.com, age=28, isWorking=true)
16:40:08.073 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=3, name=cho, email=cho@ymwoo.com, age=33, isWorking=false)
- 예제2) 내림차순
@Test
@DisplayName("이름순으로 내림차순")
void case2() {
List<User> examUserList = User.getExamUserList();
List<User> sortedUser = examUserList
.stream()
// user는 그냥 sort할수 없으므로 comparator을 제공해야 합니다.
// 이는 람다식으로 간단하게 제공할 수 있습니다.
// 아래 코드는 오름차순 방식이고 내림차순을 원한다면 u1과 u2의 순서를 바꾸면 됩니다.
.sorted((u1, u2) -> u2.getName().compareTo(u1.getName()))
.toList();
// 결과 출력
sortedUser
.forEach(user -> log.info(">>> sortedUser User Info = {}", user));
}
16:36:42.278 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=3, name=cho, email=cho@ymwoo.com, age=33, isWorking=false)
16:36:42.287 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=2, name=benny, email=benny@ymwoo.com, age=26, isWorking=true)
16:36:42.287 [Test worker] INFO com.ymwoo.stream.filter.StreamSortTest -- >>> sortedUser User Info = User(id=1, name=amil, email=amil@ymwoo.com, age=28, isWorking=true)
참조
반응형
'JAVA > Stream' 카테고리의 다른 글
[Java] Stream > distinct (0) | 2023.06.08 |
---|---|
[Java] Stream > flatMap (0) | 2023.06.08 |
[Java] Stream > map (0) | 2023.06.08 |
[Java] Stream > Filter (0) | 2023.05.31 |
[Java] Stream (0) | 2023.05.24 |