수집기(collector) : 스트림의 최종 연산(terminal operation) 중 하나로, 스트림의 요소를 수집하여 다양한 형태로 결과를 생성하거나 반환하는 역할을 한다.
- toList(): 스트림의 요소를 리스트로 수집한다.
- toSet(): 스트림의 요소를 집합(Set)으로 수집한다.
- toMap(): 스트림의 요소를 맵(Map)으로 수집한다.
- joining(): 문자열 요소를 하나의 문자열로 연결한다.
- groupingBy(): 지정된 기준에 따라 스트림의 요소를 그룹화한다.
스트림과 수집기를 사용한 예시
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("apple", "banana", "grape", "watermelon", "orange");
// 길이가 5 이상인 단어들을 대문자로 변환하여 리스트로 수집
List<String> result = words.stream()
.filter(word -> word.length() >= 5) // 길이가 5 이상인 단어 필터링
.map(String::toUpperCase) // 대문자로 변환
.collect(Collectors.toList()); // 리스트로 수집
// 결과 출력
System.out.println("Result: " + result);
}
}
핵심 정리 : 스트림 파이프라인 프래그래밍의 핵심은 부작용 없는 함수 객체에 있다. 스트림뿐 아니라 스트림 관련 객체에 건네지는 모든 함수 객체가 부작용이 없어야 한다. 종단 연산 중 forEach는 스트림이 수행한 계산 결과를 보고할 때만 이용해야 한다. 계산 자체에는 이용하지 말자. 스트림을 올바로 사용하려면 수집기를 잘 알아둬야 한다. 가장 중요한 수집기 팩터리는 toList, toSet, toMap, groupingBy, joining이다.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 48. 스트림 병렬화는 주의해서 사용하라 (0) | 2024.04.25 |
---|---|
[이펙티브 자바] 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다 (0) | 2024.04.25 |
[이펙티브 자바] 아이템 45. 스트림은 주의해서 사용하라 (0) | 2024.04.17 |
[이펙티브 자바] 아이템44. 표준 함수형 인터페이스를 사용하라 (0) | 2024.04.15 |
[이펙티브 자바] 아이템 43. 람다보다는 메서드 참조를 사용하라 (0) | 2024.04.14 |