Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

Java

[Java] Stream의 distinct()와 sorted() 어느 것부터 먼저 해야할까??

2021. 3. 14. 13:36

Stream의 distinct()와 sorted() 어느 것부터 먼저 해야할까??

numbers.stream()
                .distinct()
                .sorted()
                .collect(Collectors.toList());
numbers.stream()
                .sorted()
                .distinct()
                .collect(Collectors.toList());

다음과 같이 위의 두 코드 중 어떤 방식을 선택해야 할까??

sorted()는 흔히 우리가 생각하는 작동방식과 살짝 다르다.

List<Integer> list = List.of(2, 5, 4, 7, 3, 98, 2);
List<Integer> collect = list.stream()
        .peek(System.out::println)
        .distinct()
        .peek(i -> System.out.println("fjrst" + i))
        .collect(Collectors.toList());
System.out.println("collect = " + collect);

/*
2
fjrst2
5
fjrst5
4
fjrst4
7
fjrst7
3
fjrst3
98
fjrst98
2
collect = [2,5,4,7,3,98]
List<Integer> list = List.of(2, 5, 4, 7, 3, 98, 2);
List<Integer> collect = list.stream()
        .peek(System.out::println)
        .sorted()
        .peek(i -> System.out.println("fjrst" + i))
        .collect(Collectors.toList());
System.out.println("collect = " + collect);

/*
2
5
4
7
3
98
2
fjrst2
fjrst2
fjrst3
fjrst4
fjrst5
fjrst7
fjrst98
collect = [2, 2, 3, 4, 5, 7, 98]

위의 두 코드를 보시다시피 sorted()는 해당 위치에서 데이터들을 모아서 정렬을 한 뒤에 다시 요소를 보내준다. 데이터가 적으면 sorted() 후 distinct()가 빠른 경우도 있다. 겹치는 데이터가 어느 정도 있다는 가정하에 distinct() 후 sorted() 가 빠르다. 따라서 만약 요소들이 많을 경우에는 Heap 메모리 부족이 발생하는 상황이 발생할 수 있다.

distinct()를 먼저 사용하는 것이 안전하다. 그리고 속도적 측면에서도 대부분 유리하다.


'Java' 카테고리의 다른 글

[Java] try-with-resources 에 대해  (0) 2021.04.06
[Java] Arrays.asList와 List.of의 차이점에 대해  (0) 2021.03.21
[Java] 강한참조와 약한참조 그리고 WeakHashMap 에 대해  (0) 2021.03.01
[Java] subList()와 subSet() 에 대해  (0) 2021.02.17
[Java] LinkedHashMap의 원리에 대해  (0) 2021.02.17
    'Java' 카테고리의 다른 글
    • [Java] try-with-resources 에 대해
    • [Java] Arrays.asList와 List.of의 차이점에 대해
    • [Java] 강한참조와 약한참조 그리고 WeakHashMap 에 대해
    • [Java] subList()와 subSet() 에 대해
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바