JAVA/Stream
[Java] Stream > sorted
앵낄낄
2023. 5. 31. 16:46
반응형
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)
참조
반응형