스트림 API은 내부적으로 다양한 최적화가 이루어진다. 또한 내부 반복 뿐 아니라 코드를 병렬로 실행할지 여부도 결정할 수 있다. 스트림 API가 지원하는 연산을 알아보자.
filter()
는 Predicate를 인수로 받아 일치하는 모든 요소를 포함하는 스트림을 반환한다.
모든 채식요리를 필터링해 채식 메뉴를 만들기
List<Dish> vegetarianMenu = menu.stream()
.filter(Dish::isVegitarian)
.collect(toList());
스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct()
메서드도 지원한다.
모든 짝수를 선택해 중복을 필터링
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 9는 스트림의 요소를 효과적으로 선택하도록 takeWhile, dropWhile 두 가지 메서드를 지원한다.
TAKEWHILE 활용