스트림
스트림이란
- 람다를 활용할 수 있는 기술 중 하나로 데이터의 흐름을 의미함
- 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
- 스트림을 활용해서 필터링,데이터 변경, 다른 타입이나 자료구조로 변환 등을 할 수 있음
특징
- 스트림은 데이터 소스를 변경하지 않음
- 스트림은 작업을 내부적으로 반복 처리
- 스트림은 컬렉션의 요소를 모두 읽고 나면 닫혀서 재사용이 불가능합니다. 그러므로 필요할 경우 재생성
생성
Stream<T> Collection.stream() 을 이용하여 해당하는 컬렉션을 기반으로하는 스트림을 생성
중간 연산
- 데이터의 형변환 혹은 필터링, 정렬 등 스트림에 대한 가공을 해줍니다.
- map(변환) / sorted(정렬) / skip(스트림 자르기) / limit(스트림 자르기) 등이 있습니다.
최종 연산
- 스트림의 요소를 소모해서 결과를 반환. 최종 연산 이후에는 스트림이 닫히게 되고 더 이상 사용할 수 없습니다.
- 최종 연산의 결과값은 단일 값일 수도 있으며 배열 혹은 컬렉션일 수도 있습니다.
- collect()를 이용해서 다른 콜렉션으로 바꾸는 것, reduce를 이용해서 incremental calculation하는 것도 가장 많이 쓰이는 패턴입니다.
예제 코드
|
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
|
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("서울");
list.add("부산");
list.add("속초");
list.add("서울");
System.out.println(list);
List<String> result = list.stream() // 스트림 생성
.limit(2) //중간 연산
.collect(Collectors.toList()); // 최종 연산
System.out.println(result);
System.out.println("list -> transformation -> set");
Set<String> set = list.stream()
.filter("서울"::equals)
.collect(Collectors.toSet());
set.forEach(System.out::println);
}
}
|
cs |
생소한 개념인 람다를 활용하기위해 또 생소한 개념인 스트림을 배웠다.
'TIL' 카테고리의 다른 글
| [WIL] 2022.11.21 ~ 11.25 미니 프로젝트 주간 (0) | 2022.11.27 |
|---|---|
| 2022.11.22 객체지향 3-Tier Architecture (0) | 2022.11.22 |
| [WIL] 2022.11.14~11.18 (1) | 2022.11.20 |
| 2022.11.18 제네릭스, 람다 (0) | 2022.11.20 |
| 2022.11.17 JAVA 객체지향 (0) | 2022.11.17 |