일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Cloud Spanner
- 앤서블
- container
- kubernetes
- AWS Solution Architect
- Amazon Web Service
- AWS
- Solution Architect
- Kubernetes Engine
- AWS 자격증
- Google Cloud
- Solution Architect Certificate
- gcp
- Google Cloud Platform
- Compute Engine
- ansible
- AWS Database
- Google Cloud Platrofm
- Cloud Storage
- 아마존웹서비스
- Google Cloud Platorm
- VPC
- Cloud SQL
- GKE
- playbook
- Cloud Datastore
- 리버스 프록시
- AWS Certificate
- Reverse Proxy
- Cloud Bigtable
- Today
- Total
sungwony
[JAVA8] Stream 본문
Java 8에는 "stream"이 추가되었다. 이는 Java I/O 인터페이스의 InputStream, OutputStream과는 완전히 다르다. 스트림은 "연속된 정보"를 처리하는데 사용한다. 지금까지 우리가 알고 있는 연속된 정보에는 '배열'과 '컬렉션' 등이 존재한다. 아쉽게도 배열에서는 스트림을 활용할 수 없다. 하지만 배열을 컬렉션으로 변환하여 스트림을 활용할 수 있다.
먼저 스트림의 구조에 대해서 알아보자.
list.stream().filter(x -> x>10).count()
스트림 생성 중개 연산 종단 연산
스트림 생성 : 컬렉션의 목록을 스트림 객체로 변환. 여기서 스트림 객체는 java.util.stream패키지의 Stream 인터페이스를 말한다. 이 Stream() 메소드는 당연히 Collection 인터페이스에 선언되어 있다.
중개 연산 : 생성된 스트림 객체를 사용하여 중개 연산 부분에서 처리한다. 하지만, 이 부분에서는 아무런 결과를 리턴하지 못한다. 따라서 중개 연산(intermediate operation)이라고 한다.
종단 연산 : 마지막으로 중개 연산에서 작업된 내용을 바탕으로 결과를 리턴해 준다. 그래서 이 부분을 종단 연산(terminal operation)이라고 한다.
여기서 중개 연산은 반드시 존재해야 하는 것은 아니다. 0개 이상의 중개 연산이 존재가 가능한 optional 한 부분이다.
연산자 |
설명 |
filter(pred) |
데이터를 조건으로 거를 때 사용 |
map(mapper) |
데이터를 특정 데이터로 변환 |
forEach(block) |
for 루프를 수행하는 것처럼 각각의 항목을 꺼냄 |
flatMap(flat-mapper) |
스트림의 데이터를 잘게 쪼개서 새로운 스트림 재공 |
sorted(comparator) |
데이터 정렬 |
toArray(array-factory) |
배열로 변환 |
any / all / noneMatch(pred) |
일치하는 것을 찾음 |
findFirst / Any(pred) |
맨 처음이나 순서와 상관없는 것을 찾음 |
reduce(binop) / reduce(base,binop) |
결과를 취합 |
collect(collector) | 원하는 타입으로 데이터를 리턴 |
대표적으로 쓰이는 메소드들을 통하여 좀 더 자세히 살펴보자.
Stream forEach()
다음과 같이 이름(name), 나이(age), 점수(scoreMath, scoreEnglish)를 갖는 학생에 대한 DTO가 있다.
List로 부터 stream forEach()를 통해 각 StudentDTO의 이름을 출력해보자.
출력결과
김학생
박학생
윤학생
Stream filter()
List로 부터 stream filter()를 통해 80점 이상의 점수를 받은 합격자들의 이름을 출력해보자.
출력결과
------ 영어 합격자 발표(합격기준 80점) -----
박학생
------ 수학 합격자 발표(합격기준 80점) -----
김학생
윤학생
지금까지 Stream에 대해 아주 얕게 알아보았다. 함수형 프로그래밍의 패러다임과 Stream 클래스가 제공하는 다양한 메소들을 통해 심도있는 함수형 프로그래밍이 가능할 것이라고 생각하지만 이를 위해서는 더 많이 공부하고, 실제로 구현을 통해 경험을 쌓아갈 필요가 있다.아래는 참고가 될 만한 링크이다.
'language > java' 카테고리의 다른 글
[JAVA] Parallel Stream (0) | 2021.06.22 |
---|---|
[JAVA8] 메소드 참조 (0) | 2018.06.28 |
[JAVA8] java.util.function 패키지 (0) | 2018.06.27 |
[JAVA8] 람다(Lambda) 표현식 (0) | 2018.06.26 |
[JAVA8] 자바8 목차 (0) | 2018.06.26 |