Stream이란?
배경
- Array (혹은 Collection)의 elements들을 이용해야 하는 경우
- 기존에는 for/ foreach문을 통해 반복적으로 Array(or Collection)안 요소들을 하나씩 꺼내서 다뤄야 했음.
- 시간 복잡도 증가, 루프 여러번 돌 가능성 존재함
♘Collection
- 데이터의 집합, 그룹
- List, Set, Queue 크게 3가지 상위 인터페이스로 분리 가능
Ⅰ) Set [구현 클래스: HashSet, TreeSet]
- 순서 없는 데이터의 집합 (중복 비허용 - 수학적 집합)
Ⅱ ) List [LinkedList, Vector, ArrayList]
- 순서 있는 데이터 집합 (중복 허용)
Ⅲ ) Queue [LinkedQueue, PriorityQueue]
- 리스트와 유사
Ⅳ ) Map [Hashtable, HashMap, TreeMap]
- Collection 인터페이스를 상속 받지는 않음 but Collection으로 분류됨
- (key - value)의 쌍으로 구성된 데이터 집합 (순서X)
- 중복 비허용 (key 한정. 값(value)의 중복은 허용
정의
- 데이터의 흐름
- 람다를 활용 가능한 기술 중 하나 → 간결하게 표현 가능
장점
- Array Instance + method 조합 → 원하는 결과 filter, 입맛대로 가공해 get 가능 ∴ 배열, 컬렉션을 함수형으로 처리 가능
- 병렬처리 가능
- 작업 1개 → 2개 이상의 task로 분할해 동시 진행 (by 쓰레드)
- 내부 반복자를 사용하므로
구성요소
- 생성(선언)하기 : Stream Instance 생성
- 배열, 컬렉션을 Stream 형태로 만들기
- Stream<데이터 타입> stream명 = Array.stream(배열명) / 리스트명.stream() / Stream.of('값', '값', ...) ;
- Stream 선언이 필수적인 것은 아님! → 리스트명.stream().가공method 이렇게 바로 사용도 가능
- 배열, 컬렉션을 Stream 형태로 만들기
- 가공하기 : 원하는 결과를 만들어가는 중간 작업[intermediate operations) (ex. filtering, mapping... )
- 결과 만들기(반환) : 최종적으로 결과를 만들어내는 작업 (terminal operation)
가공 함수
- .boxed() : Array로 Stream 만들었을 경우에 사용 (각종 메소드 사용하기 위해 바탕으로...)
- Collection 스트림에서는 사용X
- .count() : 배열, 컬렉션 크기 확인
- .sorted() : 정렬
- .distinct() : 중복 생략
- .map((파라미터) -> 코드) : 각 인덱스의 값을 파라미터로 넘기고 코드를 수행
- 주로 값을 바꾸거나 더해줄 때 사용
- .foreach((파라미터) -> { 코드 }) : 각 인덱스의 값을 파라미터로 넘겨 코드 수행 (값마다 다른 메소드 수행시...)
- 주로 if else나 method등을 사용하는 것 중심
- .filter(파라미터) ->{ 코드 }) : 코드에 맞는 값만 도출
...
(출처 : https://wakestand.tistory.com/419)
'Spring > Spring boot 입문' 카테고리의 다른 글
[스프링 부트] 스프링 빈과 의존관계 - 스프링 입문 강의 / 인프런 (0) | 2022.08.05 |
---|---|
[스프링 부트] 회원 관리 예제(4)~(5) - 스프링 입문 강의 / 인프런 (0) | 2022.08.03 |
[스프링 부트] 회원 관리 예제(1)~(3) - 스프링 입문 강의 / 인프런 (0) | 2022.07.30 |
[스프링 부트] API - 스프링 입문 강의 / 인프런 (0) | 2022.07.27 |
[스프링 부트] 정적 컨텐츠, MVC와 템플릿 엔진 - 스프링 입문 강의 / 인프런 (0) | 2022.07.24 |