1. Stream의 사용이유
Collection은 자바에서 가장 많이 사용하는 기능입니다.
사실 현존하는 대부분의 어플리케이션들은 Collection을 생성하고 가공하는 서비스들입니다.
주로 Collection의 데이터를 처리하는 부분에서는 반복문과 조건문이 필수적으로 포함됩니다.
어떤 요소를 제외하거나 추가하는 작업을 하기 위해서 메서드를 선언하고 정의하는 것을 당연하게 해왔습니다.
하지만 이런 메서드의 선언과 정의를 하고 한 요소가 연산을 하는 동안에는 다른 요소는 대기하고 있는 문제점을
해결하는 것이 Stream입니다.
Stream의 특징으로는 선언형,조립 가능, 병렬화가 있습니다.
선언형은 SQL과 같이 조건을 붙이는 것만으로 함수의 구현을 따로 할 필요없이 연산이 수행되는 것을 말합니다.
조립 가능은 여러개의 연산들을 이어붙여서 파이프라인을 형성할 수 있는 것입니다.
병렬화는 병렬적으로 요소를 연산한다는 것입니다.
Stream과 Collection의 가장 큰 차이점은 게으르다는 것입니다.
예를 들어 책을 검색 했을 때 모든 요소를 받아오기 전까지는 사용자에게 책의 이미지와 제목이 보이지 않는 경우와
책의 이미지와 제목을 가져오는 대로 사용자에게 보여주는 경우가 있습니다.
이때 전자가 Collection에 해당되고 후자가 Stream에 해당됩니다.
2. Steam 사용
Stream을 사용하는 것은 정말 간단합니다.
Collection의 stream()메서드를 호출하면 Collection 객체를 Stream 형으로 반환해줍니다.
이제 Stream형으로 변경한 뒤 데이터를 가공하는 방법을 알아 보겠습니다.
중간연산자
filter(조건식) = 각 요소중 조건식에 만족하는 요소만을 추출
map(함수) = 함수를 각 요소에 적용해 반환된 값을 Stream으로 생성해 반환
flatmap(함수) = 함수를 적용한 결과를 1개의 Stream으로 반환(적용한 요소가 배열이었다면 각 배열을 1개로 합침)
sorted(정렬 조건) = 정렬조건에 따라 Stream각 요소들을 정렬
limit(n) = n만큼의 개수까지만 Stream으로 반환
distinct() = Stream내의 중복요소를 제거
skip(n) = Stream요소중 앞의 n개를 제외
최종 연산자
count() = Stream요소 개수 반환
forEach(void 함수) = Stream요소에 함수 적용
collect() = Stream을 다른 형으로 형변환
anyMatch(조건식) = 조건식에 맞는 요소가 1개라도 있으면 True반환
allMatch(조건식) = 모든 요소가 조건식에 맞으면 True반환
noneMatch(조건식) = 모든 요소가 조건시에 맞지 않으면 True반환
findAny() = Stream의 각 요소중 1개를 랜덤으로 반환
findFirst() = Stream의 각 요소중 가장 앞에있는 요소를 반환
reduce(초기값,연산) = Stream의 요소가 1개 가 될때까지 연산을 반복해서 결과를 출력
위의 메서드들이 Stream에서 지원하는 연산 메서드입니다.
이 외에 기본형 특화 Stream에서 지원하는 메서드도 있습니다.
기본형 특화 Stream이란 IntStream,DoubleStream,LongStream과 같이 Stream의 요소들이 모두 기본형인 Stream을 말합니다.
기본형 특화 Stream에서는 max(),min(),average(),sum()과 같은 연산 메서드를 지원합니다.
위의 4개의 메서드는 메서드명만 봐도 어떤 역할을 하는지 알 수 있습니다
range(a,b),rangeClosed(a,b)도 기본형 Stream에서 지원하는 메서드입니다.
range(a,b) = a+1부터 b-1까지 수를 생성
rangeClosed(a,b) = a부터 b까지 수를 생성
기본형 Stream
객체형 Stream을 기본형 Stream으로 변환하기 위해서는
mapToInt,mapToDouble,mapToLong메서드로 객체를 해당 기본형으로 변환해서 기본형 Stream으로 반환합니다.
지금까지 Stream에 어떤 함수들이 있고 함수들이 어떤 동작을 하는지 알아봤습니다.
'Java' 카테고리의 다른 글
비동기 프로그래밍 (0) | 2023.12.30 |
---|---|
Stream - Collectors (2) | 2023.12.28 |
람다 표현식의 동작과정 (0) | 2023.12.21 |
람다 표현식 사용 (0) | 2023.12.21 |
람다 표현식을 사용하는 이유 (1) | 2023.12.20 |