<중간 연산 주요 메서드>
filter() | 스트림 요소를 조건에 맞게 필터링 |
map() | 스트림 요소를 특정 형태로 변환 |
mapToInt() | 스트림 요소를 IntStream 형태로 변환 |
mapToLong() | 스트림 요소를 LongStream 형태로 변환 |
sorted() | 스트림 내 요소를 정렬 |
<최종 연산 주요 메서드>
forEach() | 스트림 요소를 순환하며 반복 처리(반환형이 void로 출력으로 많이 사용) |
count() | 스트림 요소의 총 개수를 long 타입으로 반환 |
sum() | 스트림 요소의 총합 반환 |
reduce() | 스트림 요소를 소모해가며 누적 계산을 수행, 결과값 반환 |
1. 스트림이란?
스트림(Stream)이란 컬렉션, 배열 등의 여러 자료의 처리에 대한 기능을 구현해 놓은 클래스다.
스트림을 활용하면 배열, 컬렉션 등의 자료를 일관성있게 처리할 수 있어 자료를 추상화했다고 표현한다.
2. 스트림 연산
스트림 연산의 종류에는 크게 중간 연산과 최종 연산이 있다.
1. 중간 연산 - filter(), map()
중간 연산은 자료를 거르거나 변경하여 또 다른 자료를 내부적으로 생성한다.
1) filter()
스트림의 데이터에서 조건이 참을 만족하는 데이터를 추출한다.
2) map()
스트림의 데이터에서 람다식을 적용해 데이터를 변경한다.
2. 최종 연산 - forEach(), count(), sum(), reduce()
최종 연산은 결과를 만드는데 주로 사용한다. 생성된 내부 자료를 소모하면서 연산을 수행하기 때문에 최종 연산 후에 스트림은 더이상 사용할 수 없다. 따라서 최종 연산은 마지막에 한 번만 호출한다.
1) forEach()
스트림의 데이터 각각에 대해 어떤 작업을 하고 싶을 때 사용한다. 리턴 값이 없다.
2) count()
스트림의 데이터의 개수를 반환한다.
3) sum()
스트림의 데이터의 총합을 반환한다.
4) reduec()
내부적으로 스트림의 요소를 하나씩 소모하면서 누적 계산을 하고 결과값을 반환한다.
3. 스트림 생성하고 사용하기
1. 정수 배열에 스트림 생성하고 사용하기
2. Collection에서 스트림 생성하고 사용하기
4. 스트림의 특징
1. 자료의 대상과 관계없이 동일한 연산을 수행한다
스트림은 컬렉션의 여러 자료 구조에 대해 일관성있게 작업을 처리할 수 있는 메서드를 제공한다.
2. 한 번 생성하고 사용한 스트림은 재사용할 수 없다
최종 연산으로 모든 요소가 소모된 후, 다른 기능을 호출하려면 스트림을 새로 생성해야 한다.
3. 스트림의 연산은 기존 자료를 변경하지 않는다
스트림의 여러 메서드를 호출하더라도 기존 자료에는 영향을 미치지 않는다.
4. 스트림의 연산은 중간 연산과 최종 연산이 있다
스트림의 중간 연산은 여러 개가 적용될 수 있고 최종 연산은 맨 마지막에 한 번 적용된다.
중간 연산이 호출되어도 최종 연산이 호출되지 않으면 정렬이나 검색 결과를 가져올 수 없는데 이를 지연연산이라고 한다.
5. 프로그래머가 기능을 지정하는 reduce() 연산
BinaryOperator 는 함수형 인터페이스로 apply() 메서드를 반드시 구현해야한다.
reduce() 메서드가 호출될 때 BinaryOperator의 apply() 메서드가 호출된다.
apply() 메서드는 2개의 매개변수, 1개의 반환값을 가지고 3개 모두 같은 자료형이다.
6. 스트림을 활용하여 여행객의 여행 비용 계산하기
'Java > Do It! 자바 프로그래밍' 카테고리의 다른 글
[JAVA] 15-1. 자바 입출력_자바 입출력과 스트림 (0) | 2022.05.11 |
---|---|
[JAVA] 14. 예외 처리 (0) | 2022.05.11 |
[JAVA] 13-2. 람다식 (0) | 2022.05.10 |
[JAVA] 13-1. 내부 클래스 (0) | 2022.05.10 |
[JAVA] 12-5.컬렉션 프레임워크_Map 인터페이스 (0) | 2022.05.09 |