728x90
반응형
Java Stream API는 컬렉션 데이터를 처리하는 데 강력한 기능을 제공합니다.
하지만 많은 개발자들이 Stream API의 다양한 기능을 제대로 활용하지 못하거나, 효율적인 사용 방법을 잘 모르는 경우가 많습니다.
이번 글에서는 Java Stream API를 활용한 데이터 처리의 베스트 프랙티스를 실습 예제를 중심으로 알아봅니다.
1. Stream API 기본 사용법
Stream API는 데이터의 필터링, 매핑, 정렬, 그룹화 등을 손쉽게 수행할 수 있도록 설계되었습니다. 간단한 예제를 통해 기본적인 사용법을 알아봅시다.
예제: 숫자 리스트에서 짝수만 필터링
// 데이터 리스트
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Stream API를 사용해 짝수만 필터링
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 출력: [2, 4, 6, 8, 10]
코드 설명
.stream()
: 리스트를 스트림으로 변환합니다..filter()
: 조건에 맞는 요소만 필터링합니다..collect(Collectors.toList())
: 결과를 리스트로 수집합니다.
2. 중복 제거 및 정렬
Stream API를 활용하면 중복 제거와 정렬을 손쉽게 처리할 수 있습니다.
예제: 중복 제거와 오름차순 정렬
// 데이터 리스트
List<Integer> numbers = Arrays.asList(5, 3, 7, 5, 1, 3, 9, 7);
// 중복 제거 후 정렬
List<Integer> result = numbers.stream()
.distinct()
.sorted()
.collect(Collectors.toList());
System.out.println(result); // 출력: [1, 3, 5, 7, 9]
코드 설명
.distinct()
: 중복을 제거합니다..sorted()
: 기본 오름차순으로 정렬합니다.
3. 데이터 매핑
매핑은 데이터를 변환하거나 가공하는 데 유용합니다.
예제: 문자열 길이 계산
// 문자열 리스트
List<String> words = Arrays.asList("apple", "banana", "cherry");
// 각 문자열의 길이를 매핑
List<Integer> wordLengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(wordLengths); // 출력: [5, 6, 6]
코드 설명
.map()
: 각 요소를 지정된 함수로 변환합니다.String::length
: 문자열의 길이를 반환하는 메서드 참조입니다.
4. 데이터 그룹화
Stream API를 활용하여 데이터를 그룹화하면 통계나 분류 작업을 쉽게 수행할 수 있습니다.
예제: 문자열을 길이별로 그룹화
// 문자열 리스트
List<String> words = Arrays.asList("apple", "banana", "cherry", "date");
// 문자열 길이별로 그룹화
Map<Integer, List<String>> groupedByLength = words.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(groupedByLength);
// 출력: {5=[apple], 6=[banana, cherry], 4=[date]}
코드 설명
.collect(Collectors.groupingBy())
: 데이터를 그룹화하여 Map으로 반환합니다.
5. 데이터 병렬 처리
대용량 데이터를 처리할 때는 병렬 스트림을 사용하면 성능을 크게 향상시킬 수 있습니다.
예제: 병렬 스트림으로 합계 계산
// 데이터 리스트
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 병렬 스트림으로 합계 계산
int sum = numbers.parallelStream()
.reduce(0, Integer::sum);
System.out.println(sum); // 출력: 55
코드 설명
.parallelStream()
: 병렬 스트림을 생성합니다..reduce()
: 스트림의 모든 요소를 누적하여 결과를 생성합니다.
정리
Stream API는 간결한 코드로 데이터를 처리하는 강력한 도구입니다. 이번 포스팅에서 다룬 필터링, 정렬, 매핑, 그룹화, 병렬 처리의 베스트 프랙티스를 통해 더 효율적이고 가독성 높은 코드를 작성해 보세요!
728x90
반응형
'자바' 카테고리의 다른 글
[자바] JSON 데이터 파싱후 JUnit5로 테스트 (json/application) (0) | 2024.02.18 |
---|---|
[자바] Form 데이터 파싱후 JUnit5로 테스트 (x-www-form-urlencoded) (2) | 2024.02.17 |
[자바]Java Reflection: ModelMapper를 활용한 효율적인 객체 매핑 기법 (1) | 2024.02.11 |
[자바] 레코드(Records) : 코드 간결성과 효율성을 높이는 새로운 방법 (0) | 2024.01.28 |
[자바] Try-with-resources in Java: 코드를 깔끔하게 유지하는 현대적 방법 (0) | 2024.01.21 |