Stream

자바에서 스트림을 사용하는 이유는 배열(Array) 나 컬렉션(Collection 인터페이스 -> list, set, map) 에서 원하는 값을 구하는 과정을 단순화시키기 위해서 나온 개념이다.

 

스트림은 선언, 가공, 반환의 세 부분으로 이루어진다.

 

1. 선언

선언은 배열이나 컬렉션 으로 그루핑되어 있는 자료형들을 스트림 형태로 만들어주는 과정을 의미한다.

Stream<T> stream = Arrays.stream(배열명);
Stream<T> stream = 리스트명.stream();
Stream<T> stream = stream.of('값', '값', ....);

와 같이 Stream 객체를 선언하여 사용하는 방법이 한가지 있고, 두번째는

Arrays.stream(배열명).~
리스트명.stream().~

과 같이 배열이나 리스트에서 가공해서 사용할 수도 있다.

 

 

2. 가공

가공은 선언한 스트림을 사용자가 원하는 대로 가공하는 과정을 의미한다.

(Arrays.stream(배열명)) .boxed int, Long, Double 배열로 Stream을 만들었을 경우에 사용
** 컬렉션 스트림에서는 사용하지 않는다.
.count() 배열이나 컬렉션의 크기를 확인하는 메소드
.sorted() 오름차순 정렬 메소드
.sorted(COmparator.reverseOrder()) 내림차순 정렬 메소드
.findFirst() 스트림의 처음 값을 가져오는 메소드
.skip(값) 스트림의 '값' 인덱스까지 생략한 후 나머지 스트림을 가져오는 메소드
.skip(배열크기-1).FindFirst() 스트림의 가장 마지막 값을 가져오는 메소드
.limit(값) 처음부터 '값' 까지의 스트림 값을 가져오는 메소드
.distinct() 스트림의 중복 값을 제거해주는 메소드
다만 일반 유저가 생성한 클래스를 distinct() 로 중복 제거를 하기 위해서는 object 클래스의 equals 메소드와 hashcode 메소드를 통해 비교를 해주어야 한다.
.max(T :: compare) 스트림의 최대값을 가져오는 메소드.
람다식은 
<T> (T a, T b) -> compare(a, b) 라는 람다식의 축소버전
.min(T :: compare) 스트림의 최소값을 가져오는 메소드.
<T> (T a, T b) -> compare(a, b) 라는 람다식의 축소버전
.average()  
.sum()  
.map( 람다식 매개변수 -> 코드 )  
.forEach( 람다식 매개변수 -> 코드)  
.filter( 람다식 매개변수 -> 코드 ) 조건에 맞는 데이터로 정제하는 메소드이다.
함수형 인터페이스 predicate 를 매개변수로 받아 boolean으로 반환한다.
.map( 람다식 매개변수 -> 코트 )  기존의 Stream 요소를 변환해 새로운 Stream 을 형성하는 연산이다.
함수형 인터페이스 function 을 <T> 를 매개변수로 받아 <T> 를 반환한다.
.peek() 중간연산을 해주는 메소드로, 스트림 본체의 값에는 영향을 주지 않는다.
consumer 를 매개변숧 받는다. 
.mapToInt() 제네릭 형태의 스트림을 원시 스트림으로 변환해주는 메소드
.mapToLong() 제네릭 형태의 스트림을 원시 스트림으로 변환해주는 메소드
.mapToDouble() 제네릭 형태의 스트림을 원시 스트림으로 변환해주는 메소드
.mapToObj() 원시 스트림을 스트림으로 변환해주는 메소드

 

3. 최종연산

 void forEach(Consumer <? super T> action)  Stream 의 각 요소에 지정된 작업 수행
 long count()  Stream 의 요소 개수
 Optional < T > sum (Comparator <? super T> comparator)  Stream 의 요소 합
 Optional < T > max (Comparator <? super T> comparator)  Stream 요소의 최대 값
 Optional < T > min (Comparator <? super T> comparator)  Stream 요소의 최소 값
 Optional < T > findAny()  Stream 요소의 랜덤 요소
 Optional < T > findFirst()  Stream 의 첫 번째 요소
 boolean allMatch(Pradicate < T > p)  Stream 의 값이 모두 만족하는지 boolean 반환
 boolean anyMatch(Pradicate < T > p)  Stream 의 값이 하나라도 만족하는지 boolean 반환
 boolean noneMatch(Pradicate < T > p)  Stream 의 값이 하나라도 만족하지않는지 boolean 반환 
 Object[] toArray()  Stream 의 모든 요소를 배열로 반환

 

 collector 연산  Stream의 요소를 수집하여 요소를 그룹화 하거나 결과를 담아 반환하는데 사용한다.
 - Collectors.toList()

 - Collectors.toSet()

 - Collectors.toMap()


 - Collectors.groupingBy


 - Collectors.partioningBy


 - Collectors.summarizingInt()
 reduce 연산  Stream 의 요소를 하나씩 줄여가며 계산한다.
 - Optional < T > reduce(Binary Operator<T> accumulator)
 - T reduce ( T identity, BinaryOperator<T> accumulator)
 - <U> U reduce (U indentity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
 - .reduce((x,y) -> x > y ? x : y );
 - .reduce(1, (x,y) -> x * y);
 - .reduce(0.0,
   (val1, val2) -> Double.valueOf(val1 + val2 / 10),
   (val1, val2) -> val1 + val2);

 

 

 

 

 

 

https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95

 

 

BELATED ARTICLES

more