Stream이란?
- 연속된 데이터를 처리하는 오퍼레이션들의 모음
- Stream 자체가 데이터는 아니다. 데이터를 담는 저장소도 아니다.
- 스트림이 처리하는 소스 데이터를 변경하지 않는다 => functional 하다고 표헌
- 스트림으로 처리하는 데이터는 오직 한 번만 처리한다.
- 데이터 양이 무제한일 수 있다. (실시간으로 계속 들어오는 데이터를 스트림으로 받아 처리할 수 있다.)
- Short Circuit 메소드를 활용하면 무제한의 데이터 중 특정 조건에 맞는 데이터만 골라 사용할 수 있다. (ex-선착순 10개의 데이터만 사용)
- 중개 오퍼레이션(중단되지 않고 계속해서 이어지는 형태)들은 근본적으로 lazy하다.
- 터미널 오퍼레이션 만날때까지 실행되지 않는다.
- 병렬 처리를 손쉽게 할 수 있다.
- Parallel Stream을 받아서 처리하면 JVM이 알아서 병렬 처리를 해준다.
- 병렬 처리한다고 무조건 빨라지는게 아니기 때문에 데이터가 방대하게 많은 경우가 아니면 일반적인 stream을 사용해도 좋다.
Stream Pipeline
- 0 ~ n개의 중개 오퍼레이션 + 1개의 종료 오퍼레이션 으로 구성 (종료 오퍼레이션은 반드시 1 개가 있어야 함!)
- 스트림의 데이터 소스는 오직 터미널 오퍼네이션을 실행할 때에만 처리한다.
public static void main(String [] args) {
List<String> names = new ArrayList<>();
name.add("Amy");
name.add("Bob");
name.add("Chris");
name.add("Doby");
List<String> collect = names.stream().map((s) -> {
return s.toUpperCase();
}).collect(Collectors.toList());
collect.forEach(System.out::println);
System.out.println("-----");
names.forEach(System.out::priintln);
}
/* 출력 결과
AMY
BOB
CHRIS
DOBY
-----
Amy //기존 데이터는 변경되지 않음
Bob
Chris
Doby
*/
Stream API
중개 오퍼레이션
- 계속해서 이어지는 중개형 오퍼레이터
- Stream을 리턴한다.
- filter, map, limit, skip, sorted, ...
종료 오퍼레이션(터미널 오퍼레이션)
- 종료시키는 오퍼레이션
- Stream이 아닌 다른 형태를 리턴한다.
- collect, allMatfh, count, forEach, min, max, ...
이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.
더 자바, Java 8 강의 | 백기선 - 인프런
백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합
www.inflearn.com
'Java' 카테고리의 다른 글
[Java8] Optional (0) | 2024.08.01 |
---|---|
[Java8] Stream API (0) | 2024.07.31 |
[Java8] Java8 API의 메소드 (0) | 2024.07.25 |
[Java8] 인터페이스 메소드 (2) | 2024.07.22 |
[Java8] 메소드 참조 (Method Reference) (0) | 2024.07.19 |