본문 바로가기

JAVA공부

stream이란.

자바 스트림은 자바 프로그래밍 언어에서 데이터를 다루는 유연하고 강력한 방법 중 하나입니다. 스트림은 컬렉션 요소, 배열 또는 I/O 자원과 같은 데이터 소스로부터 연속된 요소 시퀀스를 나타냅니다. 스트림은 한 번에 하나의 항목만 처리하며, 요소를 중간 단계에서 변환하고 최종 결과를 생성하는 파이프라인으로 구성됩니다.

스트림의 주요 특징은 다음과 같습니다:

  1. 컨슈머 기반 처리 (Consumer-Based Processing): 스트림은 요소를 처리하기 위해 함수형 인터페이스를 사용합니다. 이를 통해 간단하고 유연한 데이터 처리를 제공합니다.
  2. 지연 평가 (Lazy Evaluation): 스트림은 필요할 때까지 요소를 계산하지 않습니다. 이는 효율적인 리소스 사용을 가능하게 합니다.
  3. 병렬 처리 지원 (Parallel Processing Support): 스트림 API는 멀티스레드 환경에서의 병렬 처리를 지원하여 성능을 향상시킬 수 있습니다.
  4. 파이프라이닝 (Pipelining): 여러 개의 스트림 연산을 조합하여 복잡한 데이터 처리 과정을 간결하게 표현할 수 있습니다.

예를 들어, 스트림을 사용하여 컬렉션의 요소를 필터링하고 매핑한 다음, 결과를 정렬하고 집계할 수 있습니다. 이러한 작업은 한 줄로 표현할 수 있으며, 가독성이 뛰어나며 유지보수가 쉽습니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)    // 짝수만 필터링
                 .mapToInt(n -> n * 2)       // 각 요소를 2배로 매핑
                 .sum();                      // 합계 계산

System.out.println("Sum of even numbers doubled: " + sum);

 

 

여기 자바 스트림의 map 메서드를 사용한 간단한 예제가 있습니다. 이 예제에서는 문자열 리스트의 각 문자열을 대문자로 변환합니다.

 

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

public class Main {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("hello", "world", "java", "stream");

        // 각 문자열을 대문자로 변환하는 map 연산
        List<String> capitalizedWords = words.stream()
                                             .map(String::toUpperCase)
                                             .collect(Collectors.toList());

        // 결과 출력
        System.out.println("Original words: " + words);
        System.out.println("Capitalized words: " + capitalizedWords);
    }
}

 

 

 

 

 

예제

  @Transactional(readOnly = true)
    public List<CategoryListRes> getCategoryList() {

        List<Category> categoryList = categoryRepository.findAll();

        return categoryList.stream()
            .map(
                category ->
                    new CategoryListRes(category.getId(), category.getName())
            ).toList();

    }
  1. .stream(): 카테고리 목록을 스트림으로 변환합니다. 스트림은 각 요소를 연속적으로 처리할 수 있도록 합니다.
  2. .map(): 각 카테고리 요소를 다른 형태로 변환합니다. 여기서는 각 카테고리를 CategoryListRes 객체로 변환합니다.
  3. CategoryListRes(category.getId(), category.getName()): 각 카테고리를 CategoryListRes 객체로 변환하는데, 이 객체는 카테고리의 ID와 이름을 가지고 있습니다.
  4. .toList(): 변환된 요소들을 다시 리스트로 수집합니다. 이 리스트는

'JAVA공부' 카테고리의 다른 글

StringBuilder  (0) 2024.02.07
(int) Arrays.stream(array).average().orElse(0);  (0) 2024.02.06
상속  (0) 2023.10.16
package와 import  (1) 2023.10.16
접근 제어자  (1) 2023.10.16