[Java] Stream 함수

coldrice99·2024년 8월 12일
0

🌊 Java의 Stream 함수

Java의 Stream 함수는 Java 8에서 도입된 기능으로, 컬렉션(리스트, 배열 등)에 저장된 데이터를 간결하고 가독성 있게 처리할 수 있는 방법을 제공한다. 스트림을 사용하면 반복문 없이 선언적 방식으로 데이터를 다룰 수 있다.


🎯 주요 특징

  1. 선언적 코드: 스트림을 사용하여 반복문 없이 데이터를 처리할 수 있다.
  2. 함수형 프로그래밍: 함수형 프로그래밍 요소를 포함하며, 람다 표현식과 함께 사용된다.
  3. 중간 연산과 최종 연산: 스트림 연산은 중간 연산과 최종 연산으로 나뉘며, 중간 연산은 스트림을 반환하고 최종 연산은 결과를 반환하여 스트림을 종료한다.

🛠️ 사용 방법

  1. Stream 생성: 리스트, 배열, 또는 기타 컬렉션에서 스트림을 생성할 수 있다.
  2. 중간 연산: 스트림에서 수행할 작업을 정의한다. 필터링, 매핑, 정렬 등의 작업이 중간 연산에 해당한다.
  3. 최종 연산: 스트림의 데이터를 집계하거나, 리스트로 변환하는 등의 작업을 수행한다.

💻 예시 코드

아래는 스트림을 사용하여 리스트에서 짝수를 필터링하고, 각 요소에 2를 곱한 후 결과를 출력하는 간단한 예시이다:

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

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // Stream을 이용해 짝수를 필터링하고, 각 숫자에 2를 곱한 후, 출력
        List<Integer> evenNumbersMultipliedByTwo = numbers.stream()          // 스트림 생성
                .filter(n -> n % 2 == 0)                                    // 중간 연산: 필터링
                .map(n -> n * 2)                                            // 중간 연산: 매핑
                .collect(Collectors.toList());                              // 최종 연산: 리스트로 수집

        System.out.println(evenNumbersMultipliedByTwo); // [4, 8, 12, 16, 20]
    }
}

🚀 주요 스트림 연산

  • 중간 연산

    • filter(Predicate): 조건에 맞는 요소들만 선택한다.
    • map(Function): 각 요소에 함수를 적용하여 변환한다.
    • sorted(): 요소들을 정렬한다.
    • distinct(): 중복된 요소를 제거한다.
    • limit(long): 스트림에서 제공된 크기까지의 요소를 유지한다.
  • 최종 연산

    • collect(): 스트림을 리스트, 세트, 맵 등으로 변환한다.
    • forEach(Consumer): 각 요소에 대해 작업을 수행한다.
    • reduce(BinaryOperator): 요소들을 조합하여 단일 결과를 생성한다.
    • count(): 요소의 개수를 반환한다.
    • anyMatch(Predicate), allMatch(Predicate), noneMatch(Predicate): 스트림의 조건에 대한 매칭 결과를 반환한다.

📝 요약

Java의 Stream API는 컬렉션 데이터를 쉽게 조작하고 처리할 수 있는 방법을 제공하며, 선언적이고 함수형 프로그래밍 스타일의 코드를 작성할 수 있게 해준다. Stream은 반복적인 데이터 처리 코드를 간결하게 만들어주고, 데이터 흐름을 직관적으로 표현할 수 있는 도구이다.


profile
서두르지 않으나 쉬지 않고

0개의 댓글