스트림 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. 내부 반복으로 작업을 처리한다.
'Java > Java 8' 카테고리의 다른 글
자바 CompletableFuture 를 사용하여 비동기 프로그래밍 구현 (0) | 2024.06.07 |
---|---|
자바 스트림의 중간 연산과 최종 연산 종류 (0) | 2024.06.07 |
Optional in java 8 example 예제 (0) | 2023.08.30 |
[자바] Java 8 스트림 특징 (0) | 2020.12.18 |
[JAVA8] LocalDate, LocalDateTime (0) | 2020.12.18 |