<데이터 스트림 기법>
람다, 스트림처리 기술이 필요함.
- 람다 기술 : 함수형 프로그래밍(함수를 데이터처럼 취급하자.) / 변수에 대입, 함수의 매개변수, 리턴값으로 처리. -> 결국엔 대입과 관련.
- 스트림 처리 :
함수에 참조값을 대입하겠다.
자바에서의 문제점 : 함수의 개념이 아예 없음.
거기에 특화되어 설계단계부터 객체지향을 위한 언어로 만들어짐.
익명개체와 클래스를 접목시켜서 메소드 1개만 있는것으로 만듦.
타입 정의는 인터페이스로.
<람다 기술>
왼쪽 - 매개변수, 오른쪽 - 함수 본체 파트
- 매개변수 : 매개변수가 1개일 경우 괄호 생략 가능. 매개변수 2개 이상일때는 무조건 괄호 사용해야 함.
- 함수 본체 : 1줄짜리면 중괄호 생략 가능, 2줄 이상이면 중괄호가 필요함.
리턴 생략 가능.
- 타입 : 인터페이스로 1개 메서드로만 구성.
@FunctionalInterface
편의를 위해서 표준 함수 인터페이스를 제공하고 있음.
매개변수 없고, 리턴이 void인 것.
람다의 특징(주의사항)
- this 해석
- this 용도
매서드 참조
- Static Method : 클래스명::메서드명
- Instance Method : 인스턴스변수명::메서드명
- [this]::메서드명
생성자 참조
- 클래스명::new
매개변수가 없으면? : Cosumer
매개변수가 있으면? : Function
람다식 : 1줄자리 함수를 만들때 많이 쓰임.
<스트림 - Stream>
- I/O 처리
- 데이터 처리
- 배열, Collection과 관련이 많음.
소스 역할
1. 스트림이란?
- 자바 8부터 추가된 컬렉션(배열 포함)의 저장요소를 하나씩 참조
- 람다식 (함수적-스타일(functional-style))으로 처리할 수 있도록 해주는 반복자
2. 스트림의 특징
- Iterator와 비슷한 역할 하는 반복자
3. 람다식으로 요소 처리 코드 제공
- 대부분의 요소처리 메소드는 함수적 인터페이스 매개 타입
4. 내부 반복자 사용하므로 병렬 처리 쉬움
- 컬렉션 내부에서 요소들 반복시킴
- 개발자는 요소당 처리해야 할 코드만 제공
- 내부반복자 : 스트림
- 외부반복자 : 직접 순회
- 중간처리 : 가공작업
- 최종처리 : 1회
5. 스트림의 종류
- 자바 8부터 새로 추가
- java.util.stream 패키지에 스트림(stream) API 존재
6. 스트림 인터페이스의 구현 객체
- 주로 컬렉션과 배열에서 얻음
- 소스로부터 스트림 구현 객체 얻는 경우
<스트림 파이프라인>
1. 파이프라인
- 여러 개의 스트림이 연결되어 있는 구조
- 파이프라인에서 최종 처리를 제외하고는 모두 중간 처리 스트림
2. 중간 처리와 최종 처리
- Stream 인터페이스는 필터링, 매핑, 정렬 등의 많은 중간 처리 메소드 가짐
- 메소드들은 중간 처리된 스트림 리턴
- 스트림에서 다시 중간 처리 메소드 호출해 파이프라인 형성
- Ex) 회원들 중 남자 회원들의 나이 평균 구하기
- 스트림이 제공하는 중간 처리용 메소드 - 리턴 타입이 스트림
- 필터링 : 개수조정
- 매핑 : 타입변경
- 정렬 : 순서조정
- 루핑 : 디버깅 확인
* map(...)
* mapToDouble(...)
* mapToInt(...)
* mapToLong(...)
* mapToObj(...)
Casting
* asDoubleStream()
* asLongStream()
* boxed()
차원축소기능 -> split()을 사용하여 2차원을 1차원으로 변경
* flatMap(...)
* flatMapToDouble(...)
* flatMapToInt(...)
* flatMapToLong(...)
3. 중간 처리 메소드와 최종 처리 메소드
- 스트림이 제공하는 최종 처리용 메소드
* 리턴 타입이 기본 타입이거나 OptionalXXX
<필터링>
1. 필터링이란?
- 중간 처리 기능으로 요소를 걸러내는 역할
- 필터링 메소드인 distinct()와 filter() apthem
- 모든 스트림이 가지고 있는 공통 메소드
2. distinct() 메소드 - 중복을 제거하는 기능
- Stream의 경우 Object.equals(Object)가 true
-
3. filter() 메소드
- 매개값으로 주어진 Predicate가 true를 리턴하는 요소만 필터링
<매핑(mapping)>
1. 매핑(mapping)
- 중간 처리 기능으로 스트림의 요소를 다른 요소로 대체하는 작업
2. flatMapXXX() 메소드
- 요소를 대체하는 복수 개의 요소들로 구성된 새로운 스트림 리턴
3. mapXXX() 메소드
- 요소를
- 객체, 실수, 정수, long
3. asDoubleStream(), asLongStream(), boxed() 메소드
<스트림의 종류>
1. 스트림 인터페이스의 구현 객체
- 주로 컬렉션
'멀티캠퍼스 > Spring' 카테고리의 다른 글
231020 (금) Weka (0) | 2023.10.20 |
---|---|
231019(목) - MongoDB (0) | 2023.10.20 |
231013 (금) NoSQL - MongoDB (0) | 2023.10.16 |
231012 (목) NoSQL - MongoDB (0) | 2023.10.13 |
검색 알고리즘 (0) | 2023.10.12 |