본문 바로가기

카테고리 없음

자바 스트림(Stream) 사용법과 예제: 효율적인 데이터 처리를 위한 강력한 기능을 알아보세요.

1. 자바 스트림(Stream)이란?

자바 스트림(Stream)은 자바 8에서 도입된 새로운 기능으로, 컬렉션, 배열 등의 데이터 요소를 처리하는 기능을 제공합니다. 스트림은 데이터의 흐름을 나타내며, 데이터를 손쉽게 다루고 변환할 수 있는 강력한 기능을 제공합니다. 스트림을 이용하면 병렬 처리와 같은 다양한 연산을 효율적으로 수행할 수 있습니다. 스트림은 데이터 소스로부터 데이터를 읽고, 원하는 연산을 수행한 후 결과를 얻을 수 있습니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다. 자바 스트림은 함수형 프로그래밍의 개념을 도입하여 데이터를 일관되고 안전하게 처리할 수 있는 효과적인 방법을 제공합니다.

스트림은 크게 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 스트림을 반환하므로 여러 중간 연산을 연결할 수 있습니다. 최종 연산은 스트림의 요소를 소모하므로 최종 연산 이후에는 스트림을 재사용할 수 없습니다. 스트림은 내부 반복을 통해 간결하게 요소들을 처리하며, 병렬 처리에도 적합한 구조를 가지고 있습니다.

다음 항목에서는 자바 스트림의 사용법을 자세히 알아보겠습니다.

2. 자바 스트림의 사용법

스트림을 사용하기 위해선 먼저 스트림을 생성해야 합니다. 자바에서는 스트림을 생성하는 여러 가지 방법이 제공되며, 다음은 대표적인 예시입니다.

2.1. 컬렉션에서 스트림 생성하기

List<String> list = Arrays.asList("Java", "Python", "C++");
Stream<String> stream = list.stream();

2.2. 배열에서 스트림 생성하기

String[] array = {"Apple", "Banana", "Orange"};
Stream<String> stream = Arrays.stream(array);

2.3. 정수 범위로 스트림 생성하기

IntStream range = IntStream.range(1, 10); // 1부터 9까지

2.4. 파일에서 스트림 생성하기

Path path = Paths.get("data.txt");
Stream<String> stream = Files.lines(path);

스트림을 생성한 후에는 다양한 중간 연산과 최종 연산을 사용하여 원하는 작업을 수행할 수 있습니다. 중간 연산은 여러 개를 연결하여 사용할 수 있고, 최종 연산은 항상 마지막에 호출되어야 합니다. 아래는 자주 사용되는 연산의 예시입니다.

2.5. 중간 연산

  • filter: 조건에 맞는 요소만 필터링
  • distinct: 중복 제거
  • map: 요소를 변환
  • sorted: 요소를 정렬
  • limit: 요소 개수 제한
  • skip: 요소 건너뛰기

2.6. 최종 연산

  • forEach: 요소를 하나씩 처리
  • collect: 요소를 수집하여 컬렉션으로 반환
  • count: 요소 개수 반환
  • anyMatch: 조건에 맞는 요소가 하나라도 있는지 확인
  • allMatch: 모든 요소가 조건에 맞는지 확인
  • noneMatch: 모든 요소가 조건에 맞지 않는지 확인
  • reduce: 요소를 모두 결합하여 단일 값 반환

다음은 실제로 예제 코드를 통해 자바 스트림의 사용법을 살펴보도록 하겠습니다.

3. 자바 스트림 예제

다음은 자바 스트림을 사용하는 예제 코드입니다.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("Apple", "Banana", "Orange", "Grape", "Mango");

        // 중간 연산 - 과일 이름을 대문자로 변환하고, 길이가 5 이상인 과일만 필터링
        List<String> result = fruits.stream()
                .map(String::toUpperCase)
                .filter(s -> s.length() >= 5)
                .collect(Collectors.toList());

        // 최종 연산 - 결과 출력
        result.forEach(System.out::println);
    }
}

위 예제는 fruits 리스트의 요소들을 스트림으로 변환하고, 중간 연산과 최종 연산을 사용하여 원하는 결과를 도출하는 예제입니다. 중간 연산에서는 map을 사용하여 과일 이름을 대문자로 변환하고, filter를 사용하여 길이가 5 이상인 과일만 필터링합니다. 마지막으로 collect를 사용하여 결과를 리스트로 수집합니다. 최종 연산에서는 forEach를 사용하여 결과를 출력합니다.

실행 결과는 다음과 같습니다.

BANANA
ORANGE

위 예제를 통해 자바 스트림의 사용법을 실제로 확인해볼 수 있습니다. 다양한 중간 연산과 최종 연산을 조합하여 원하는 데이터 처리를 유연하게 할 수 있다는 장점을 가지고 있습니다.