1. 프레디케이트로 필터링
•
스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 프레디케이트(<T> → boolean)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다.
◦
예를 들어 다음 코드에서처럼 모든 채식요리를 필터링해서 채식 메뉴를 만들 수 있다.
List<Dish> vegetarianMenu = menu.stream()
.filter(Dish::isVegetarian)
.collect(toList());
Java
복사
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);
Java
복사