반응형

스트림 API

 

스트림 API의 필요성

 

함수형 프로그래밍 지원: 자바 8에서 도입된 스트림 API는 함수형 프로그래밍을 지원하여 코드의 간결성과 가독성을 높입니다.

데이터 처리 효율성: 컬렉션 데이터의 필터링, 매핑, 정렬 등 다양한 작업을 쉽게 수행할 수 있습니다.

병렬 처리: 스트림 API는 간단한 병렬 처리를 지원하여 대량 데이터 처리의 성능을 향상시킵니다.

 

스트림 API의 기본 사용법

 

스트림 생성

  - 컬렉션에서 스트림 생성:

List<String> items = Arrays.asList("Apple", "Banana", "Orange");
Stream<String> stream = items.stream();

 

 - 배열에서 스트림 생성:

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

 

중간 연산 (Intermediate Operations)

  - 필터링 (Filtering):

Stream<String> filteredStream = stream.filter(item -> item.startsWith("A"));

 

  - 매핑 (Mapping):

Stream<String> mappedStream = stream.map(String::toUpperCase);

 

최종 연산 (Terminal Operations)

  - 수집 (Collecting):

List<String> result = stream.collect(Collectors.toList());

 

  - 반복 (Iteration):

stream.forEach(System.out::println);

 

람다 표현식의 필요성

 

간결한 코드: 람다 표현식은 익명 함수를 표현하는 간결한 방법으로, 코드의 길이를 줄이고 가독성을 높입니다.

함수형 프로그래밍: 함수형 인터페이스와 함께 사용되어 함수형 프로그래밍 패턴을 지원합니다.

 

람다 표현식의 기본 사용법

 

기본 문법: (매개변수) -> { 함수 내용 }

(int a, int b) -> a + b;

단순 예제:

Runnable 인터페이스 구현:

Runnable r = () -> System.out.println("Hello, World!");
new Thread(r).start();

함수형 인터페이스와 함께 사용:

Predicate 인터페이스:

Predicate<String> isEmpty = s -> s.isEmpty();
boolean result = isEmpty.test("");

 

실습 예제 1: 리스트 필터링과 매핑

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

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

        // 필터링: "A"로 시작하는 항목 필터링
        List<String> filteredItems = items.stream()
                                          .filter(item -> item.startsWith("A"))
                                          .collect(Collectors.toList());
        System.out.println("Filtered Items: " + filteredItems);

        // 매핑: 모든 항목을 대문자로 변환
        List<String> mappedItems = items.stream()
                                        .map(String::toUpperCase)
                                        .collect(Collectors.toList());
        System.out.println("Mapped Items: " + mappedItems);
    }
}

실습 예제 2: 숫자 리스트 처리

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

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

        // 스트림을 사용하여 합계 계산
        int sum = numbers.stream()
                         .reduce(0, (a, b) -> a + b);
        System.out.println("Sum: " + sum);

        // 람다 표현식을 사용하여 각 숫자를 출력
        numbers.forEach(n -> System.out.println("Number: " + n));
    }
}

 

 

스트림의 특징
1. Stream 은 원본의 데이터를 변경하지 않는다. 

2. Stream 은 재 사용이 불가능하여서 일회용으로 사용된다.

3. 내부 반복으로 작업을 처리한다.

반응형

+ Recent posts