스트림 (stream)
자료의 대상과 관계 없이 동일한 연산을 수행
- 배열, 컬렉션을 대상으로 동일한 연산을 수행함
- 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함
한 번 생성하고 사용한 스트림은 재사용 불가
- 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨
- 다른 연산을 위해서는 새로운 스트림을 생성해야함
스트림 연산은 기존 자료를 변경하지 않음
- 자료에 대한 스트림을 생성하면 별도의 메모리 공간을 사용하므로 기존 자료를 변경하지 않음
스트림 연산은 중간 연산과 최종 연산으로 구분됨
- 스트림에 대한 중간 연산은 여러 개 적용될 수 있지만 최종 연산은 마지막에 한 번만 적용됨
- 최종 연산이 호출되어야 중간연산의 결과가 모두 적용됨
- 이를 지연 연산이라고 함
스트림 연산 - 중간 연산
- 중간 연산 - filter(), map()
- 조건에 맞는 요소를 추출(filter() 하거나 요소를 변환(map())
- 문자열의 길이가 5 이상인 요소만 출력하기
reduce() 연산
- 정의된 연산이 아닌 프로그래머가 직접 지정하는 연산을 적용
- 최종 연산으로 스트림의 요소를 소모하며 연산 수행
- 배열의 모든 요소들의 합을 구하는 reduce()연산 생성하기
Arrays.stream(arr).reduce(0, (a,b) -> a+b));
- 첫번 째 숫자는 초깃값
- 두번 째 요소로 전달되는 람다식에 따라 다양한 기능을 수행
reduce() 연산 예제 - 배열 내 제일 긴 문자열 찾기
- 람다식으로 구현
- 함수형 인터페이스 구현