자바
자바 Stream API
devjones
2021. 9. 25. 12:21
자바 1.8에 도입된 Stream API에 대해 알아보자.
다음은 Stream 인터페이스에 적힌 주석의 첫 문장으로, 스트림의 정의를 확인할 수 있다.
A sequence of elements supporting sequential and parallel aggregate operations.
번역(야매)을 하자면
원소의 순차적이고 병렬적인 연산을 종합지원하는 시퀀스다.
여기서 시퀀스는 사전적 의미를 따르는거 같고,
원소라 함은 컬렉션, 배열, 파일, 정규표현식 패턴 패처, 난수 생성기, 다른스트림을 예로 들수 있다.(이펙티브자바3)
다음은 우리 팀 멤버의 나이를 담은 ArrayList이다.
List<Integer> teamMemberAge = new ArrayList<Integer>();
teamMemberAge.add(48);
teamMemberAge.add(35);
teamMemberAge.add(26);
teamMemberAge.add(25);
이제 나는 여기에 스트림API를 도입하여
3년뒤 나이를 계산하고, 여전히 30살이 넘지 않은 멤버를 정렬하여 콘솔에 출력하려한다.
teamMemberAge.stream()
.map((age) -> age + 3) // 모든 원소에 대해 age에 3살을 더한다.
.filter((age) -> age < 30) // 30살 아래로 필터처리한다.
.sorted() // 정렬한다.
.forEach(System.out::println); // 출력
스트림 파이프라인의 구조는 소스 스트림(teamMemberAge.stream())에서 시작해 중간 연산(map, filter, sorted), 그리고 종단연산(terminal operation)으로 구성된다.
이펙티브자바3 책에서는 지연평가라는 개념을 소개하는데,
이는 연산의 시작이 종단연산임을 뜻하는 개념이다.
따라서 종단연산 없이는 중간 연산이 no-op이 되버리니, 종단 연산을 꼭 붙이라는 말이다.