맨땅에 헤딩하는 개바른자

[Java] Stream > sorted 본문

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)

참조

https://backtony.github.io/java/2022-02-06-java-46/

반응형

'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