📍 스트림(Stream)이란?
: Java 8 부터 추가된 기술로 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술이다.
🪄 스트림의 특징
- 원본 데이터 소스를 변경하지는 않는다 - 읽기만 함
- 일회용이다. - 한 번 사용 시 닫혀서 재사용이 불가능
- 최종 연산 전까지 중간 연산을 수행하지 않는다.
- 작업을 내부 반복으로 처리한다.
- 병렬 처리가 쉽다. - 멀티쓰레드 사용
- 기본형 스트림을 제공한다.
🪄 스트림 종류
- Arrays.stream() : 배열 스트림
- .stream() : 컬렉션 스트림 (. 앞에 컬렉션이 들어감)
- Stream.builder()
- IntStream : 기본 타입형 스트림
- parallelStream() : 병렬 스트림
🪄 스트림 중간 연산
- Filtering : 스트림 내 요소들을 하나씩 평가해서 걸러내는 작업. (if문 역할)
- 람다식의 리턴값은 boolean 값이고, true인 경우에만 다음 단계를 수행한다.
- filter()
- Mapping : 스트림 내 요소들을 하나씩 특정 값으로 변환하는 작업.
- 값을 변환하기 위한 람다를 인자로 받아 스트림을 원하는 모양의 새로운 스트림으로 변환하고 싶을 때 사용한다.
- map()
- Sorting : 스트림 내 요소들을 정렬하는 작업. (Comparator 사용)
- sort()
- 기타 연산
- distinct() : 중복 제거
- limit() : 최대 크기 제한
- skip() : 앞에서부터 n개 skip하기
🪄 스트림 중간 연산
- Calculating : 기본형 타입을 사용하는 경우 스트림 내 요소들로 최소, 최대, 합, 평균 등을 구하는 연산을 수행할 수 있다.
- Reduction : 스트림의 요소를 하나씩 줄여가며 누적연산을 수행한다.
- reduce(초기값, (누적변수,요소) -> 수행문)
- Collecting : 스트림의 요소를 원하는 자료형으로 변환한다.
- collect()
- Matching : 특정 조건을 만족하는 요소가 있는지 체크한 결과를 반환한다.
- anyMatch() : 하나라도 만족하는 요소가 있는지
- allMatch() : 모두 만족하는지
- noneMatch() : 모두 만족하지 않는지
- Iterating : forEach로 스트림을 돌면서 실행되는 작업이다.
- forEach()
- Finding : 스트림에서 하나의 요소를 반환한다.
- findAny() : 먼저 찾은 요소 하나 반환, 병렬 스트림의 경우 첫번째 요소가 보장되지 않음
- findFirst() : 첫번째 요소 반환
'백엔드개발 > Java' 카테고리의 다른 글
[JAVA] DFS 깊이 우선 탐색 (0) | 2025.01.28 |
---|---|
[JAVA] BFS 너비 우선 탐색 (0) | 2025.01.24 |
[Java] 정적(Static) 멤버의 사용 (1) | 2024.10.31 |
[Java] 일급 컬렉션 (0) | 2024.10.30 |
[JAVA] StringBuilder (2) | 2024.10.12 |