자바 스트림은 자바 프로그래밍 언어에서 데이터를 다루는 유연하고 강력한 방법 중 하나입니다. 스트림은 컬렉션 요소, 배열 또는 I/O 자원과 같은 데이터 소스로부터 연속된 요소 시퀀스를 나타냅니다. 스트림은 한 번에 하나의 항목만 처리하며, 요소를 중간 단계에서 변환하고 최종 결과를 생성하는 파이프라인으로 구성됩니다.
스트림의 주요 특징은 다음과 같습니다:
- 컨슈머 기반 처리 (Consumer-Based Processing): 스트림은 요소를 처리하기 위해 함수형 인터페이스를 사용합니다. 이를 통해 간단하고 유연한 데이터 처리를 제공합니다.
- 지연 평가 (Lazy Evaluation): 스트림은 필요할 때까지 요소를 계산하지 않습니다. 이는 효율적인 리소스 사용을 가능하게 합니다.
- 병렬 처리 지원 (Parallel Processing Support): 스트림 API는 멀티스레드 환경에서의 병렬 처리를 지원하여 성능을 향상시킬 수 있습니다.
- 파이프라이닝 (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();
}
- .stream(): 카테고리 목록을 스트림으로 변환합니다. 스트림은 각 요소를 연속적으로 처리할 수 있도록 합니다.
- .map(): 각 카테고리 요소를 다른 형태로 변환합니다. 여기서는 각 카테고리를 CategoryListRes 객체로 변환합니다.
- CategoryListRes(category.getId(), category.getName()): 각 카테고리를 CategoryListRes 객체로 변환하는데, 이 객체는 카테고리의 ID와 이름을 가지고 있습니다.
- .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 |