모던 자바 인 액션 5.1 필터링

박상준·2024년 10월 30일
0

프레디케이트로 필터링

// 5.1.1 프레디케이트로 필터링
List<Dish> vegetarianMenu = menu.stream()
    .filter(Dish::isVegetarian) // 채식 요리인지 확인하는 메서드 참조
    .toList();
  • Dish::isVegetarian → 메서드 참조를 사용 각 요리가 채식 요리인지 확인한다.
  • 조건을 만족하는 요리들만을 포함하는 새로운 스트림이 생성..
  • 최종적으로 리스트로 수집

프레디케이트를 사용한 필터링 성능

  • 외부 반복과 성능 차이가 있을까?
    • 차이가 거의 없긴함
    • 다만 filter라는 중간 연산을 통하여 가독성이 좋아짐.
    • limit 처리를 통하여 게으른 특성을 통해 불필요한 연산자체를 막을 순 있음.

고유 요소 필터링

  • distinct 메서드로 고유 요소로 이루어진 스트림 반환가능
  • 객체의 hashCode 및 equals 로 결정된다.
// 5.1.2 고유 요소 필터링
Stream.of(1, 2, 1, 3, 3, 2, 4)
        .distinct()
        .forEach(System.out::println);
        
        
1
2
3
4

distinct 성능

  • 내부적으로 해시셋을 사용한다고 합니다.
    • 요소의 수가 많아질 수록 성능에 영향을 미칠 순 있는데
    • 해시셋은 내부적으로 해시 테이블로 구성되어있는데
    • 특정 객체의 계산된 해시값이 ‘32’ 라면 해당 값을 가진 키를
    • 상수 시간에 조회한다.
    • 거의 성능 저하가 없음.
    • 만약 같은 객체가 존재하면 ( hashCode 함수로 키 값 비교 )
      • equals 를 통해 실제로 동일한 객체인지를 다시 확인한다.
profile
이전 블로그 : https://oth3410.tistory.com/
post-custom-banner

0개의 댓글