스트림 (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[] 배열명 = {1, 2, 3, 4}; // 배열에 대한 스트림 생성 및 연산 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 |
'Java > Base' 카테고리의 다른 글
[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을 가져와 DB 테이블에 삽입하기 (0) | 2023.03.16 |