본문 바로가기
Java

[Java] 스트림 (Stream)

by 스응 2023. 4. 7.
728x90
728x90

스트림 (Stream)

  - java.util.stream (IO 스트림과 다름)

  - 컬렉션과 배열에서 데이터를 처리하는 기능 제공

 

  - 자료의 대상과 관계없이 동일한, 일관성 있는 연산을 수행함 ( == 자료 처리에 대한 추상화가 구현됨)

      → 자료의 처리를 쉽고 간단하게 함

  - 한 번 생성하고 사용한 스트림은 재사용할 수 없음

      : 자료에 대한 스트림을 생성하여 연산을 수행하고 나면 스트림은 소모됨

          → 다른 연산을 수행하려면 스트림을 다시 생성해야 함

  - 스트림 연산은 기존 자료를 변경하지 않고, 새롭게 생성하는 것

      : 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간이 별도로 생성됨

          → 연산이 수행되어도 기존 자료에 대한 변경은 발생하지 않음

  - 멀티 스레드를 사용한 비동기 처리

      → 병렬 컴퓨팅을 사용하여 효율적인 데이터 처리를 가능하게 함

  - 함수형 프로그래밍

      → 코드의 간결성 및 가독성 향상

      · 람다 표현식과 메서드 참조 사용 가능

 

#  스트림 연산

  1) 중간 연산 : 여러 개의 연산이 적용될 수 있음 (생략 가능)

      · 필터링, 매핑 등의 작업

      ex) map(), filter(), sorted() 등

  2) 최종 연산 : 마지막에 한 번만 적용됨 (반드시 실행)

      · 실제로 스트림을 사용하여 컬렉션을 반환하거나 소비하는 작업

      ex) sum(), count(), forEach() 등

      · forEach()는 stream()을 생략하고 리스트명.forEach(...); 로도 사용할 수 있음

 

  - 최종 연산이 호출되어야 중간 연산에 대한 수행이 이뤄지고, 그 결과가 만들어짐

      ⇒ 지연 연산 : 중간 연산에 대한 결과는 연산 중에 알 수 없으며, 반드시 최종 연산이 필요함

 

 


스트림 생성 및 연산

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
int[] 배열명 = {1234};
 
// 배열에 대한 스트림 생성 및 연산
int sumVal = Arrays.stream(배열명).sum();
long count = Arrays.stream(배열명).count();
 
------------------------
 
List<String> 리스트명 = new ArrayList<>();
// 값 넣기
...
 
// 리스트에 대한 스트림 생성
Stream<String> stream = 리스트명.stream(); // 변수에 담지 않고 사용해도 됨
 
// sorted() : 정렬
// 람다식 활용
stream.sorted().forEach( 요소변수 -> { 코드; } );
 
// 스트림은 사용하고 나면 다시 생성해야 함
// map : 자료 구조를 map 형태로 변환함 (key : 기존 String / value : 메서드 결과 값)
리스트명.stream().map( 요소변수 -> 요소변수.메서드() ).forEach( 요소변수 -> { 코드; } );
 
// filter : 조건에 맞는 것들만 필터링
리스트명.stream().filter( 요소변수 -> 조건식 ).forEach( 요소변수 -> { 코드; });
cs
320x100
반응형

'Java' 카테고리의 다른 글

[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙  (0) 2023.06.18
[Java] 데이터 형식 지정  (0) 2023.04.20
[Java] 람다 표현식 (Lambda expression)  (0) 2023.03.22
[Java] 래퍼 클래스 (Wrapper class)  (0) 2023.03.22
[Java] JSON  (0) 2023.03.15

댓글