<aside> 📖 이 장의 내용

</aside>


필터링

프레디 케이트로 필터링

스트림 인터페이스는 filter 메서드를 지원한다 filter 메서드는 프레디케이트(불리언을 반환하는 함수)를 인수로 받는다.

고유 요소 필터링

distinct 메서드는 고유 요소로 이루어진 스트림을 반환한다(고유 여부는 스트림에서 만든 객체의 hashCode, equals로 결정). 쉽게 말하면 선택하고 중복을 피한다.


스트림 슬라이싱

takeWhile

filter 연산은 전체 스트림을 반복하면서 각 요소에 프레디케이트틀 적용하게 된다. takeWhile을 이용하면 무한스트림을 포함한 모든 스트림에 프레디케이트를 적용해 스트림을 슬라이스할 수 있다.

쉽게 말해

filter는 스트림의 각 요소를 검사하고 주어진 조건(프레디케이트)에 맞는 요소만을 선택하여 새로운 스트림을 만드는 연산입니다. 예를 들어, 스트림의 숫자들 중에서 홀수만을 선택하려면, filter를 사용하여 홀수인지 아닌지를 판별하는 프레디케이트를 적용하면 됩니다.

takeWhile은 스트림의 요소를 시작부터 검사하되, 주어진 조건(프레디케이트)이 참인 경우에만 해당 요소를 선택하여 새로운 스트림을 만드는 연산입니다. 그러나 조건이 거짓이 되는 순간, 그 이후의 요소들은 검사하지 않고 스트림 생성을 중단합니다. 이를 이용하면 무한 스트림을 다룰 때 효과적으로 스트림 생성을 제어할 수 있습니다. 예를 들어, 무한 스트림 중에서 10보다 작은 숫자만 선택하려면, takeWhile을 사용하여 숫자가 10보다 작은지를 판별하는 프레디케이트를 적용하면 됩니다. 이 경우, 10 이상의 숫자가 나타나는 순간, 그 이후의 요소는 생성하지 않습니다.

이렇게 보면, filtertakeWhile 모두 스트림의 요소를 프레디케이트로 필터링하지만, 그 적용 방식과 결과에 차이가 있습니다. filter는 전체 스트림에 대해 적용되지만, takeWhile은 조건이 거짓이 될 때까지만 적용합니다.

dropwhile

프레디케이트가 처음으로 거짓이 되는 지점까지 발견된 요소를 버린다. 프레디케이트가 거짓이 되면 그 지점에서 작업을 중단하고 남은 모든 요소를 반환한다.

스트림 축소

limit(n) 메서드는 스트림이 정렬되어 있으면 최대 요소 n개를 반환할 수 있다.