티스토리 뷰
스트림이란
스트림이란 다양한 데이터 소스를 표준화 된 방법으로 다루기 위한 방법이다.
자바에는 다양한 Collection Framework가 존재한다.
예를들어 List, Set, Map과 같은 것들이 이에 해당한다. 하지만 이 인터페이스 모두가 각각 성격이 달라 사용방법이 달랐기에 자바8부터 스트림이 등장하였고 이를 통해 표준화된 방법을 제공하고 있다.
List, Set, Map과 같은 데이터 소스로 부터 스트림을 만들 수 있다.
스트림을 만들고 나면 그 이후부터는 표준화된 방식으로 작업을 처리하게 된다.
작업은 N번의 중간연산
과 한번의 최종연산
으로 이루어진다. 즉, 중간작업을 여러번 거쳐 우리가 원하는 데이터(스트림)로 바꾼다음 최종연산을 통해 우리가 원하는 데이터를 얻을 수 있다.
스트림으로 변환하는 방법은 다음과 같다.
Stream<T> Collection.stream()
이 함수를 사용하게 되면 다양한 컬렉션을 스트림으로 변경할 수 있다.
Stream<String> strStream = Stream.of("a", "b", "c");
와 같이 집적적으로 스트림을 생성하는 것 도 가능하다.
결과적으로 스트림을 이용하는 순서는 다음과 같다.
스트림 만들기 -> 중간연산 -> 최종연산
중간연산의 결과는 스트림
이다.
반면에 최종연산은 결과적으로 우리가 얻고자 하는 데이터 값
이 된다.
stream.distinct().limit(5).sorted().forEach(System.out::println)
//스트림 중간연산1 중간연산2 중간연산3 최종연산
실제로 이런식으로 사용되게 된다.
스트림은 데이터소스로부터 데이터를 읽기만 할 뿐 직접적으로 변경하지 않기에 원본을 건드리지 않는다. 또한 스트림은 Iterator
와 같이 일회용으로 사용되기에 한번 사용되고 나면 다시 스트림을 생성하여 사용해야 한다.
스트림의 연산
위에 설명했듯 중간연산은 여러번 가능하며, 최종연산은 단 한번만 가능하다. 최종연산을 하면 스트림의 요소를 모두 소모하기에 스트림이 닫히게 되어 다시 사용이 불가능하다.
스트림에서 제공하는 중간연산은 다음과 같다.
distinct() // 중복을제거
filter() // 조건에 안맞는 요소 제외
limit() // 스트림 일부를 잘라낸다
skip() // 스트림의 일부를 건너뛴다
peek() // 스트림의 요소에 작업을 수행한다. (주로 작업 중간 결과를 확인할 때 쓰인다.)
sorted() // 정렬
map(Function),flatMap(Function) // 스트림의 요소를 변환한다
최종연산은 다음과 같다.
forEach() // 각 요소에 지정된 작업을 수행한다.
forEachOrdered() // 병렬 실행일 경우 스트림의 순서를 유지한다.
count() // 개수 반환
max(), min() // 최대/최소를 반환
findAny() // 스트림의 요소중 아무거나 하나를 반환한다.(병렬)
findFirst()// 첫번째요소 반환(직렬)
allMatch(), anyMatch(), noneMatch() //주어진 조건을 모든 요소가 만족시키는지, 아닌지 확인한다.
toArray() //배열로변환한다.
reduce() // 스트림의 요소를 하나씩 줄여가면서 계산한다.
collect() //스트림의 요소를 수집. 주로 결과를 컬렉션에 담아 반환할 때 사용된다.
'Java' 카테고리의 다른 글
[JAVA] 세션 사용하기 (HttpSession) (0) | 2022.05.09 |
---|---|
[JAVA] 자바 Optional 사용 방법 (0) | 2022.03.12 |
[JAVA] 자바 스레드 풀(Thread Pool) (0) | 2022.03.04 |
[JAVA] 자바 스레드 우선순위 및 동기화 (0) | 2022.03.04 |
[JAVA] 자바 스레드 생성 및 실행 (0) | 2022.03.04 |
- Total
- Today
- Yesterday
- 백준
- 컴퓨터 통신
- ReactNative
- boj
- java
- 자바
- 예외처리
- Computer Architecture
- 중앙대학교
- 벨만포드
- nodeJS
- 동적계획법
- typeORM
- dfs
- 재귀
- 자바스크립트
- 세그먼트 트리
- 시뮬레이션
- 컴퓨터 구조
- 구현
- BFS
- 스레드
- 알고리즘
- node.js
- nest.js
- 투포인터
- nestjs
- 그래프
- 그리디
- 백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |