1. Stream API란
스트림이란 자바 8 API에 새롭게 추가된 기능이다. JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java를 이용해 함수형으로 프로그래밍할 수 있는 API 들을 제공해주고 있다. 그 중에서 Stream API는 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의해두었다. 여기서 데이터를 추상화하였다는 것은 데이터의 종류에 상관 없이 같은 방식으로 데이터를 처리할 수 있다는 것을 의미하며, 그에 따라 재사용성을 높일 수 있다.
이번 로또 과제를 하면서 개인적으로 Stream API의 사용에 대해서 리뷰어분께 질문을 해봤고,대체러 Stream을 사용한다는 이야기를 들을 수 있어, 한번 정리하면서 공부를 진행해보려고 한다.
위의 예제에서 나와있듯이, 스트림은
- 컬렉션으로부터 stream 얻기
- 중간 연산 (이번 경우에는 mapToLong, 여러개의 중간 연산을 할 수 있다.)을 통해 찾고자 하는 값 얻기
- 연산이 끝난 값을 원하는 자료구조로 만들어 획득하기
와 같은 구조를 생각하며 만든다면 더욱 쉽게 만들 수 있다.
2. Stream API의 특징
- 원본의 데이터를 변경하지 않는다.
- 일회용이다.
- 내부 반복으로 작업을 처리한다.
3. Stream API 활용하기
3.1. 중간연산
메서드명 | 처리 내용 | ex) |
filter | 조건에 일치하는 요소만을 걸러낸다. | .filter(p-> p.length()>5) |
limit | 원하는 개수만큼 고른다. | .limit(5) |
distinct | 유니크한 요소만을 추출한다. (중복 요소 제거) | .distinct() |
map | 요소들을 특정 값으로 변환 | .map(p-> "[" + p + "]") .map(Lotto::new) |
sorted | 정렬하기 | .sorted() (오름차순 정렬) .sorted(Comparator.reverseOrder()) (내림차순) |
peek | 특정 연산 수행 | .peek(System.out::println) |
3.1.1 조건 검사
stream의 요소들이 특정한 조건을 충족하는지 검사하기 위해서사용한다.
메서드명 | 처리 내용 | ex) |
anyMatch | 하나라도 조건을 만족하는지 확인 | .anyMacth(p -> p.equals(1)) |
allMatch | 모든 요소가 조건을 만족하는지 확인 | .allMacth(p -> p.equals(1)) |
nonMatch | 모든 요소가 조건을 만족하지 않는지 확인 | .nonMacth(p -> p.equals(1)) |
3.2. 종료연산
3.2.1 Collect와 함께 결과를 정리해서 추출하는 종료 작업
메서드명 | 처리 내용 | 예제 |
collect | Collectors와 함께 객체 생성 | .collect(아래에 있는 연산들) |
toList | List로 반환합니다. | collect.(Collectors.toList()) |
toSet | Set으로 반환합니다. | collect.(Collectors.toSet()) |
joining | 전체 요소를 하나의 문자열로 결합합니다. | collect(Collectors.joining(",")) |
groupingBy | 요소를 그룹으로 나눕니다. | collect(Collectors.groupingBy(Student::getScore) |
3.2.2 결과를 하나만 추출하는 종료 작업
메서드명 | 처리 내용 | 인수 |
findFirst | 선두의 요소를 반환합니다. | 없음 |
findAny | 어떤 한 요소를 반환합니다. | 없음 |
min | 최솟값을 갖는 요소를 반환합니다. | Comparator(인수가 Stream 대상 객체) |
max | 최댓값을 갖는 요소를 반환합니다. | Comparator(인수가 Stream 대상 객체) |
3.2.3 요소를 집계하여 결과의 수치를 반환하는 종료 작업
메서드명 | 처리 내용 | 반환 값 |
count | 요소의 개수를 반환합니다. | long |
min | 최소 요소를 반환합니다. | OptionalInt/OptionalDouble/OptionalLong |
max | 최대 요소를 반환합니다. | OptionalInt/OptionalDouble/OptionalLong |
sum | 합계 값을 반환합니다. | OptionalInt/OptionalDouble/OptionalLong |
average | 평균값을 반환합니다. | OptionalDouble |
Reference
https://tecoble.techcourse.co.kr/post/2021-05-23-stream-api-basic/
'프로그래밍 공부 > Java' 카테고리의 다른 글
[JAVA] JVM이란? (0) | 2022.03.13 |
---|---|
[OOP] 객체지향 프로그래밍 (0) | 2022.03.02 |
[Regex] 정규식이란? (2) | 2022.02.21 |
[JUnit5] 테스트 기초 알아보기 (0) | 2022.02.17 |