반응형
Java의 Stream API와 람다식의 조합은 리스트나 컬렉션을 더 쉽게 다루기 위해 도입되었습니다. 익숙해지면 데이터를 필터링하거나 변환, 수집하는 등의 작업을 간결하게 처리할 수 있습니다. 아래에 기본 구조와 함께 자주 쓰이는 연산을 소개해 볼게요.
1. Stream의 기본 구조
Stream API는 리스트, 배열 등 컬렉션 데이터를 일련의 연산으로 처리할 수 있도록 도와줍니다. .stream()을 호출하면, 해당 리스트는 스트림이 되어 여러 단계로 연산이 가능해집니다. 일반적인 구조는 다음과 같습니다:
list.stream()
.중간 연산1()
.중간 연산2()
...
.최종 연산();
- 중간 연산: filter, map, sorted 등 데이터를 변환하거나 필터링합니다.
- 최종 연산: collect, forEach, count 등 스트림을 최종적으로 처리하고 결과를 반환합니다.
2. 람다식
람다식은 익명 함수 형태로, 간단하게 말하면 메서드의 내용을 한 줄로 표현하는 방식입니다. 이로 인해 코드가 매우 간결해지며, Stream에서 많은 연산이 람다식을 받아 다양한 처리가 가능해집니다.
람다식의 기본 구조는 (매개변수) -> { 표현식 }이며, 매개변수에 대해 단일 명령문이 있을 때는 중괄호 { }를 생략할 수도 있습니다. 예를 들어,
list.stream().filter(s -> s.startsWith("A")).collect(Collectors.toList());
위는 s.startsWith("A")가 참인 요소만 필터링하고 새 리스트로 수집합니다.
3. Stream과 람다식을 사용한 예시
- 필터링: 리스트에서 특정 조건을 만족하는 요소만 남기는 방법입니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> result = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); // 결과: ["Alice"]
- 매핑: 리스트의 각 요소를 변환하는 방법입니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream() .map(name -> name.length()) .collect(Collectors.toList()); // 결과: [5, 3, 7]
- 정렬: 스트림의 요소를 특정 기준으로 정렬합니다.
List<String> names = Arrays.asList("Charlie", "Alice", "Bob");
List<String> sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // 결과: ["Alice", "Bob", "Charlie"]
- 그룹화: 예를 들어, 사람들의 리스트에서 나이를 기준으로 그룹화할 수 있습니다.
List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 30) );
Map<Integer, List<Person>> peopleByAge = people.stream() .collect(Collectors.groupingBy(Person::getAge)); // 결과: {30=[Alice, Charlie], 25=[Bob]}
4. 스트림의 주요 메서드와 사용법
- filter: 조건을 만족하는 요소만을 추출합니다.
- map: 각 요소를 변환합니다.
- distinct: 중복을 제거합니다.
- sorted: 요소를 정렬합니다.
- collect: 스트림의 요소들을 모아서 리스트나 맵 등으로 변환합니다.
스트림과 람다식을 사용하는 가장 큰 이유는 가독성과 간결함입니다. 익숙해지면 훨씬 직관적으로 데이터를 처리할 수 있으며, 불필요한 반복문을 제거하여 더 직관적으로 데이터를 다룰 수 있습니다.
반응형
'JAVA' 카테고리의 다른 글
| Java 컬렉션 프레임워크 정리 – ArrayList, HashSet, HashMap 비교 (1) | 2025.03.07 |
|---|---|
| [JDK환경변수] JAVA 설정 - 윈도우 환경변수 한줄로 나올 때 (0) | 2025.02.26 |
| [JAVA] Stream 정리 [Stream, Map, Filtering, Sorted, Collect] (1) | 2024.09.05 |
| [Java] Random보단 SecureRandom 를 사용하자. (0) | 2023.04.04 |
| [JAVA] 9. 다형성 / 객체지향적 이해, 다형성과 클래스, 다형성과 인터페이스 (0) | 2022.05.21 |