Stream
- 스트림(Stream)은 Java 8에서 도입된 기능으로, 컬렉션(예: 리스트, 배열) 등의 데이터 소스를 처리하고 변환하는 데 사용된다.
- 스트림은 데이터의 흐름을 추상화한 것으로, 데이터를 필터링, 매핑, 축소 등의 작업을 통해 처리할 수 있다.
- 불변 데이터 흐름 : 데이터 소스를 변경하지 않고 처리한다.
- 선언적: 스트림 API는 선언적 스타일을 사용하여 데이터 처리 작업을 표현한다. 이는 코드의 가독성을 높이고 유지보수를 쉽게 한다.
- 함수형 프로그래밍: 스트림 API는 람다 표현식과 함수형 인터페이스를 사용하여 함수형 프로그래밍 스타일을 지원한다.
- 지연 연산 (Lazy Evaluation) : 스트림의 중간 연산은 지연(lazy) 연산으로, 최종 연산이 호출될 때까지 실제로 수행되지 않는다. 이는 성능 최적화에 도움이 된다.
- 병렬 처리: 스트림 API는 병렬 처리를 지원하여 멀티코어 프로세서를 활용한 성능 향상을 도모할 수 있다. (멀티스레드 사용)
import java.util.stream.Stream;
⬇️ 스트림 자체를 출력하면 스트림 객체의 참조를 나타내는 문자열이 출력된다.
스트림의 요소를 출력하려면 스트림의 최종 연산을 사용해야 한다.
예를 들어, forEach 메서드를 사용하여 스트림의 각 요소를 출력할 수 있다.
public class Ex01_Stream {
public static void main(String[] args) {
// 스트림 생성
Stream<Integer> stream = Stream.of(1,2,3,4,5);
// 스트림 요소 출력
// forEach는 스트림의 최종 연산
// 스트림의 각 요소에 대해 람다표현식으로 출력한다.
stream.forEach(System.out::println);
}
}
더보기
더보기
메서드 참조 ::
'::'는 메서드 참조 연산자이다.
람다 표현식을 더 간결하게 작성할 수 있는 방법 중 하나이다
System.out::println 은 System.out.println 메서드를 참조하는 메서드 참조 표현식이다.
- Stream.of(values)
- Arrays.stream(array)
- Arrays.asList(values).stream()
// 여러 값을 스트림으로 변환
Stream<Integer> stream = Stream.of(1,2,3,4,5);
stream.forEach(System.out::println);
// 배열을 스트림으로 변환
Integer[] array = {1,2,3,4,5};
Stream<Integer> stream2 = Arrays.stream(array);
stream2.forEach(System.out::println);
// List, Set 등의 컬렉션에서 스트림 생성
List<Integer> list = Arrays.asList(1,2,3,4,5);
Stream<Integer> stream3 = list.stream();
Arrays.asList() : 주어진 요소들을 포함하는 고정 크기의 리스트를 반환한다.
- java.util.Arrays 클래스에 정의된 정적 메서드
- 이 메서드는 가변 인수를 받아서, 주어진 요소들을 포함하는 고정 크기의 리스트를 반환한다
- 반환된 리스트는 java.util.List 인터페이스를 구현한 java.util.Arrays$ArrayList 클래스의 인스턴스이다
- List<Integer>는 제네릭 타입을 사용하여 Integer 타입의 요소를 가지는 리스트를 나타낸다
- 제네릭 타입을 사용하면 컴파일 시 타입 안전성을 보장할 수 있다
주요 메서드
중간 연산 (결과로 새로운 스트림 반환)
- filter: 조건에 맞는 요소 필터링.
- map: 요소 변환.
- sorted: 정렬.
- distinct: 중복 제거.
- limit(n): 앞의 n개 요소만 처리.
최종 연산 (스트림을 소비하여 결과 생성)
- collect: 스트림의 결과를 리스트, 세트 등으로 수집.
- forEach: 각 요소에 작업 수행.
- count: 요소 개수 반환.
- reduce: 요소를 하나의 결과로 합침
filter
forEach
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
// 5보다 큰 숫자만 필터링
numbers.stream()
.filter(x -> x>5)
.forEach(System.out::println);
}

map
sorted
forEach
List<Integer> numbers2 = Arrays.asList(10,5,8,1,3);
// 2배로 변환 후 정렬
numbers2.stream()
.map(x -> x*2)
.sorted()
.forEach(System.out::println);

filter
collect
/** 리스트 수집 */
List<Integer> numbers3 = Arrays.asList(1,2,3,4,5);
// 짝수만 리스트로 수집
List<Integer> evenNumbers = numbers3.stream()
.filter(x -> x%2==0)
.collect(Collectors.toList());
System.out.println(evenNumbers);

.collect(Collectors.toList())
- 스트림의 최종 연산으로, 스트림의 요소를 리스트로 수집한다.
- Collectors.toList()는 스트림의 요소를 리스트로 수집하는 컬렉터를 반환한다.
- 짝수만을 포함하는 리스트를 생성한다.
Stream은 컬렉션 기반 데이터 처리에 적합하다 !
refer to
메가아이티아카데미 이광호쌤
https://data04190.tistory.com/59
반응형
'IT > JAVA' 카테고리의 다른 글
| StringBuilder (0) | 2025.01.19 |
|---|---|
| IntStream (0) | 2025.01.04 |
| Java 란 (3) | 2024.12.27 |
| MyBatis Log4j Error (0) | 2024.10.10 |
| JDBC (1) | 2024.10.08 |