Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

Formoat's Open Blog

스트림 (Stream) 본문

Java/Java Basic

스트림 (Stream)

snd-snd 2019. 9. 4. 00:19

2019/09/04 - [Java] - 스트림 중간 처리

2019/09/04 - [Java] - 스트림 최종 처리


1. 스트림

1) 컬렉션, 배열 등의 저장 요소들을 하나씩 참조하여 반복적으로 처리할 수 있도록 해주는 반복자라고 할 수 있다.

2) 스트림이 제공하는 대부분의 요소 처리는 람다식, 메소드참조를 이용해 처리 한다.

3) 내부 반복자를 사용하기 때문에 병렬 처리가 쉽다.

4) 중간 처리, 최종 처리를 할 수 있기 때문에 불필요한 코드를 제거하고 간소화 할 수 있다.

# 내부 반복자 : 컬렉션 내부에서 요소들을 반복 처리하는 코드 패턴 (스트림이 사용하는 패턴)

# 외부 반복자 : while문, for문 등 을 이용해 개발 코드와 컬렉션을 이동하며 반복하는 코드 패턴

(1) 병렬 처리

한가지 작업을 서브 작업들로 나누어 스레드에 벙렬적으로 처리 후 결과를 모아 최종 결합하는 방법

자바는 ForkJoinPool 프레임워크를 이용해 병렬처리를 한다.

(2) 중간 처리

요소들의 필터링, 매핑, 정렬, 그룹핑 등

(3) 최종 처리

반복, 카운트 평균, 총합 등

 

 

 

< Stream API > 이미지 출처: http://slides.com/umitunal/java-8-streams/fullscreen

 

 

 

# 주요 인터페이스

(1) BaseStream : 모든 스트림의 상위 인터페이스로 공통 메소드들을 정의 (직접 사용되지 않음)

(2) Stream : 객체 요소를 처리하는 스트림

(3) IntStream, LongStream, DoubleStream : 기본타입인 int, long, double 요소를 처리하는 스트림

# 스트림의 구현 객체를 얻는 방법

 

Return Type Method Source
Stream<T>

java.util.Collection.stream()

java.util.Collection.parallelStream()

컬렉션

Stream<T>

IntStream

LongStream

DoubleStream

Arrays.stream(T [ ]), Stream.of(T [ ])

Arrays.stream(int [ ]), IntStream.of(int [ ])

Arrays.stream(long [ ]), LongStream.of(long [ ])

Arrays.stream(double [ ]), DoubleStream.of(double [ ])

배열
IntStream

intStream.range(int, int)

intStream.rangeClosed(int, int)

int
LongStream

LongStream.range(long, long)

LongStream.rangeClosed(long, long)

long
Stream<Path>

Files.find(Path, int, BiPredicate, FileVisitOption)

Files.list(Path)

디렉토리
Stream<String>

Files.lines(Path, Charset)

BufferedReader.lines()

파일

DoubleStream

IntStream

LongStream

Random.doubles( ... )

Random.ints( ... )

Random.longs( ... )

랜덤수

 

 

 

2. 스트림 파이프라인

스트림은 중간 처리와 최종 처리를 위해 파이프라인을 형성해 처리를 한다.

파이프라인은 스트림을 파이프처럼 연결시킨 것을 말하며, 최초의 오리지날 스트림에서 리덕션 결과물을 산출하기 위해

중간 처리 메소드를 이용해 필터링 처리를 하고 최종 처리 메소드를 이용해 결과물을 반환한다.

중간 처리 과정에서는 메소드의 반환 타입이 스트림 타입으로 여러번의 필터링 처리가 가능하다.

# 리덕션 : 대량의 데이터에를 가공하여 축소하는 것을 의미 (평균값, 최대값, 최소값 등 집계)

 

 

< 스트림 파이프라인 처리 과정 > 이미지 출처: https://palpit.tistory.com/648

 

 

 

 

 

 

 

 

 

 

 

 

<< 최종 처리의 집계 기능이 시작되어야 비로소 오리지날 스트림에서부터의 중간 처리 과정이 시작 된다. >>

'Java > Java Basic' 카테고리의 다른 글

스트림 최종 처리  (0) 2019.09.04
스트림 중간 처리  (0) 2019.09.04
컬렉션 - Stack, Queue  (0) 2019.09.04
컬렉션 - Tree  (0) 2019.09.04
컬렉션 - Map  (0) 2019.09.04
Comments