여러개의 메서드를 병렬로 해서 처리가 가능하다. 람다식을 이용해서 병렬식으로 처리하면 효율적으로 처리할 수 있다.
여러개의 연산을 병렬로 처리하면 아주 효율적으로 프로그램을 구현할 수 있다.
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 |