[Java] 스트림(Stream) 기본 정리 및 메소드 사용 예제
2022. 3. 4. 16:47
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); |
'Java' 카테고리의 다른 글
[Java] Collection 프레임워크(2) - Set(HashSet, TreeSet) (0) | 2022.03.02 |
---|---|
[Java] Collection 프레임워크(1) - List(LinkedList, Stack, Vector, ArrayList) (0) | 2022.03.02 |
[Java] Collections.sort // Comparable+CompareTo 와 Comparator 를 이용한 정렬 (0) | 2022.02.17 |
[Java] Arrays.sort / list.sort / Collections.sort / 정렬하는 방법 정리 (0) | 2022.02.17 |
[Java] 메소드 사용에 있어서의 break, return 의 차이점 (0) | 2022.02.15 |