Java/Java

[Java] 스트림(Stream)

깨준 2024. 10. 20. 22:42

1. Stream이란?

Java 8에서 새로 도입된 기능으로, 컬렉션이나 배열 등의 데이터 집합을 처리하기 위한 일련의 기능을 제공한다. 이전에는 for 또는 foreach 문을 돌면서 요소 하나씩 꺼내는 방식으로, 코드도 길고 가독성도 길어서 불편함하여 이를 극복하고자 Stream이 나왔다.

2. Stream 특징

  1. 데이터 흐름
    Stream은 데이터 흐름을 나타내며, 데이터를 컬렉션이나 배열에서 가져와 연산을 수행하고 최종 결과를 생성한다.
  2. 원본 데이터 변경 X
    Stream은 원본 데이터를 변경하지 않는다. 즉, Stream 연산은 원본 컬렉션을 수정하지 않고 새로운 결과를 생성한다.

  3. 중간연산과 최종연산
    •    중간 연산: Stream에 여러 연산을 체인처럼 연결할 수 있다. 이 연산들은 지연(lazy) 방식으로 수행되며, 필요할 때만 실행된다. filter(), map(), sorted() 등이 중간 연산이다.
    •    최종 연산: Stream의 연산이 실제로 수행되는 지점이다. 최종 연산이 호출되면 Stream이 처리된다. forEach(), collect(), count() 등이 최종 연산이다.

3. Stream 예시

import java.util.Arrays;
import java.util.List;

public class StreamFilterMapExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "grape");

        List<Integer> lengths = words.stream() // Stream 생성
                .filter(word -> word.length() <= 2) // 중간 연산: 길이가 2 이하인 문자열 필터링
                .map(String::length) // 중간 연산: 문자열을 그 길이로 변환
                .toList(); // 최종 연산: 리스트로 변환

        // 결과 출력
        System.out.println("길이가 2 이하인 문자열의 길이: " + lengths);
    }
}

결과: 길이가 2 이하인 문자열의 길이: [5, 6]