반응형
Stream API의 특징 및 기존 Collection과의 차이점
Stream API 사용 메커니즘
someCollection.스트림생성().중개연산().최종연산();
1. 스트림 생성
// 가변인자 배열을 받아 스트림 생성
Stream<String> stream = Stream.of("Java", "C", "Javascript");
// 컬렉션에서 메소드 호출을 통한 스트림 생성
List<String> list = getSomeList();
Stream<String> stream = list.stream();
2. 중개 연산
// 데이터 필터링
Stream<String> filteredStream = stream.filter(e -> e.contains("Java"));
// 데이터 변환
Stream<String> processedStream = stream.map(e -> e.toUpperCase());
// 중복 값 제거
Stream<String> uniqueStream = stream.distinct();
// 첫 번째 요소 조회
Stream<String> first = stream.findFirst();
// 정렬
Stream<String> sortedStream = stream.sorted();
Stream<String> sortedStream = stream.sorted(Comparator.comparing(String::length));
// 데이터 필터링 후 첫 번째 요소 조회
Stream<String> filteredFirst = stream.filter(조건).findFirst();
// 중복 값을 제거한 후 정렬
Stream<String> uniqueSorted = stream.distinct().sorted(정렬조건);
3. 최종연산 (결과 취합)
중개연산을 통해 가공된 스트림을 원하는 결과로 추출하는 방법을 제공한다.
// List로 변환
List<String> processedList = stream.collect(Collectors.toList());
// Joining
String joined = stream.collect(Collectors.joining());
String joined = stream.collect(Collectors.joining(","));
// 그룹핑 (분류함수에 따라 분류됨)
Map<String, List<String>> groups = stream.collect(Collectors.groupingBy(분류함수));
// 그룹핑 응용 (분류를 수행한 후 각 그룹별 건수를 집계한 Map으로 변환)
Map<String, Long> groups = stream.collect(Collectors.groupingBy(분류함수, Collectors.counting()));
이 포스트에서 소개한 방법들은 Stream API에서 제공하는 수많은 연산에 비하면 극히일부분입니다.
기존 for, while 등 반복문, if문 등을 통해 각 종 컬렉션을 처리하던 방법에 비해
코드량을 상당량 줄여주고, 간결하게 만들어 줄 수 있는 방법들에 대해 알아봤습니다.
하지만 Stream API 또한 개발자의 성향, 습관 등에 따라 오히려 가독성이 떨어질 가능성이 있으며 성능에 대해서도 전통적인 Collection보다 떨어지는 케이스도 존재한다고 합니다.
Collection, Stream 각각의 특징에 따라 알맞게 사용하여 두 방식이 제공하는 강점들을 챙길수 있는 코딩을 하는 것이 가장 Best 하다는 생각이 듭니다.
반응형
'Back-End > Java' 카테고리의 다른 글
자바 동일성, 동등성 차이 (0) | 2018.11.24 |
---|---|
Java NIO란 (0) | 2018.10.02 |
java 외부라이브러리 포함 jar파일 만들기 (0) | 2018.09.17 |
java 클래스에서 상대경로로 파일 접근 (1) | 2018.09.17 |
java 라이브러리를 사용하는 소스 컴파일 및 실행 방법 (0) | 2018.09.17 |