Back End/Java

스트림 API(stream)

DevHam94 2023. 7. 24. 12:36

 

여러개의 메서드를 병렬로 해서 처리가 가능하다. 람다식을 이용해서 병렬식으로 처리하면 효율적으로 처리할 수 있다. 

여러개의 연산을 병렬로 처리하면 아주 효율적으로 프로그램을 구현할 수 있다. 

 

stream 데이터의 흐름, 통로

컬렉션이나 배열같은 여러개의 데이터를 효율적으로 조작할려면 메서드를 이용해서 관리하면 효율적으로 관리할 수 있다. 

배열이나 데이터의 흐름을 스트림으로 변환해서 처리하면 좋다. 

 

배열을 스트림으로 변환할려면 Arrays.stream() 메서드를 이용한다. 

이렇게 사용하면 데이터의 처리 작업을 연속적인 파이프라인으로 나타낼 수 있어 가독성이 높아지고. 병렬 처리를 쉽게 구현할 수 있다. 

 

int[] numbers={1,2,3,4,5};
IntStream stream = Arrays.stream(numbers);

int sumEvenNo = Arrays.stream(numbers).
					  .filter(n->n%2 == 0)
                      .sum(); // 2로 나누어 떨어지는 수만 필터링을해서 합한다.

중간에 .filter()는 중간연산이라고하고 sum()은 최종연산이라고한다.

 

중간연산은 스트림을 연산하고 결과 스트림을 반환하고, 최종연산은 스트림을 연산하고 최종적으로 나오는 결과를 반환한다. 

구분 설명 예시 메서드
중간연산 스트림의 원소를 변환, 필터링, 정렬 등 중간 단계에서 처리하는 연산 filter(), map(), sorted(), distinct(), limit(), skip() 등
최종연산 스트림의 최종결과를 반환하는 연산 forEach(), count(), collect(), reduce(), min(), max() 등
스트림 생성 컬렉션, 배열, 파일 등의 데이터 소스를 스트림으로 반환 stream(), parallelStream() 
스트림 종료 스트림의 자원을 해제하고 최종결과를 반환 close(), toArray() 등
병렬 스트림 여러 개의 스레드를 이용하여 동시에 처리하는 스트림 parallel(), sequential()
스트림 연결 두 개 이상의 스트림을 연결하여 처리하는 스트림 flatMap(), concat() 등
스트림 요약 스트림의 요약 정보를 반환하는 연산 summaryStatistics(), averagingDouble(),summingInt() 등
스트림 분할 스트림을 기준에 따라 분할하여 처리하는 연산 partitioningBy(), groupingBy(), toMap() 등
스트림 요소 검색 스트림에서 특정 요소를 검색하거나 확인하는 연산 anyMatch(), allMatch(), noneMatch(), findFirst(), findAny(), forEachOrdered() 등
스트림 합치기 두 개 이상의 스트림을 합쳐서 처리하는 연산 reduce(), collect() 등

 

사용예제 

Predicate<T>는 boolean

boolean test<T t>

Predicate<Integer> isEven=n->n % 2 == 0; 이렇게하면 짝수여부를 판별해 boolean으로 돌려준다. 

'Back End > Java' 카테고리의 다른 글

Jsoup API를 이용한 웹크롤링  (0) 2023.07.27
기타 API들  (0) 2023.07.26
람다식, 함수형 인터페이스  (0) 2023.07.20
제네릭(Generic)  (0) 2023.07.16
컬렉션 프레임워크 API(Collection Framework API)  (0) 2023.07.15