
자바 Stream API는 Java 8부터 도입된 기능으로,
컬렉션 데이터를 함수형 스타일로 처리할 수 있게 해주는 강력한 도구입니다.
복잡한 반복문을 간결하게 줄이고, 가독성 높은 코드를 작성할 수 있어 실무에서 매우 유용하게 활용됩니다.
이번 글에서는 Stream API 중 자주 사용하는 .map(), .filter(), .collect() 등의 메서드 활용법을 실무 예제 중심으로 정리합니다.
1. Stream API란 무엇인가?
Stream은 자바 컬렉션(List, Set 등)을 함수형 방식으로 처리하기 위한 클래스입니다.
데이터를 반복하며 필터링, 변환, 정렬, 집계 등 다양한 처리를 체이닝(메서드 연결) 형태로 구현할 수 있습니다.
List<String> names = List.of("Tom", "Jane", "Steve");
names.stream()
.filter(n -> n.length() > 3)
.map(String::toUpperCase)
.forEach(System.out::println);
위 코드 한 줄로 "4글자 이상의 이름을 대문자로 출력"하는 처리를 깔끔하게 구현할 수 있습니다.
2. .map() 메서드 활용 예제
.map()은 **스트림 내 각 요소를 변환(transform)**할 때 사용합니다.
List<String> names = List.of("alice", "bob", "carol");
List<String> upper = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
- 입력값을 새 값으로 변경
- DTO 변환, 포맷 변경, 대소문자 변환 등에 활용
List<User> users = getUsers();
List<String> emails = users.stream()
.map(User::getEmail)
.collect(Collectors.toList());
실무에서 DTO → 응답 객체 변환 시 자주 사용합니다.
3. .filter() 메서드 실무 예시
.filter()는 조건에 따라 요소를 걸러낼 때 사용합니다.
List<Integer> nums = List.of(1, 2, 3, 4, 5);
List<Integer> even = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
또는 객체 조건 필터링:
List<User> users = getUsers();
List<User> activeUsers = users.stream()
.filter(User::isActive)
.collect(Collectors.toList());
- 특정 조건을 만족하는 데이터만 추출
- 필터링 후 .count(), .findFirst() 등과 함께 사용 가능
4. .collect(), .sorted(), .forEach() 등 실전 활용
.collect()
- 스트림을 리스트나 셋 등 컬렉션으로 다시 수집할 때 사용
List<String> result = strings.stream()
.collect(Collectors.toList());
.sorted()
- 정렬 기능. 기본 정렬 또는 Comparator 사용 가능
List<String> sorted = strings.stream()
.sorted()
.collect(Collectors.toList());
.forEach()
- 결과를 반복하며 출력, 저장, 로깅 등에 사용
users.stream()
.forEach(u -> System.out.println(u.getName()));
5. 실무에서 자주 쓰는 패턴 요약
| 기능 | 예제 메서드 |
| 변환 | .map() |
| 필터링 | .filter() |
| 수집 | .collect() |
| 정렬 | .sorted() |
| 반복 처리 | .forEach() |
| 합계 | .mapToInt().sum() |
| 조건 검색 | .anyMatch(), .allMatch() |
| 찾기 | .findFirst(), .findAny() |
Stream API는 코드의 가독성, 유지보수성, 생산성을 높이는 필수 기술입니다.
✅ 마무리
자바 Stream API는 실무에서 자주 사용하는 핵심 기능으로,
.map(), .filter(), .collect() 등을 잘 활용하면 반복문 중심의 절차형 코드를
함수형 스타일의 간결한 코드로 바꿀 수 있습니다.
익숙해지면 쿼리처럼 데이터를 다루는 능력이 향상되며, 개발 속도와 코드 품질 모두 개선됩니다.