5.1 필터링

스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터링하는 방법을 배운다.

5.1.1 프레디케이트로 필터링

스트림 인터페이스는 filter 메서드를 지원하는데, 해당 메서드에서는 프레디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다.

List<Dish> vegetarianMenu = menu.stream()
																.filter(Dish::isVegetarian)
																.collect(toList());

5.1.2 고유 요소 필터링

스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. (고유 여부 → 객체의 hashCode, equals로 결정됨.)

List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream()
			 .filter(i -> i % 2 == 0)
			 .distinct()
			 .forEach(System.out::println);

5.2 스트림 슬라이싱

스트림의 요소를 선택하거나 스킵하는 방법에 대해 다룬다.

5.2.1 프레디케이트를 이용한 슬라이싱

takeWhile, dropWhile 두 가지 메서드를 지원한다.