함수형 인터페이스

 

Runnable 받는 매개변수도 리턴도 없음

Supplier<T> 받는 매개변수가 없고 리턴은 있음

Consumer<T> 받는 매개변수가 있고 리턴은 없음

Function<T,U> 받는 매개변수와 리턴 모두 존재

Predicate<T> 받는 매개변수와 boolean 타입의 리턴이 존재

 

스트림

 

1) 스트림 생성하는 방법

 

컬렉션 -> 스트림 (stream() 메소드 사용)

List<Integer> list = Arrays.asList(1,2,3,4,5);

Stream<Integer> is = list.stream();

 

배열 -> 스트림

기본형 배열 -> 기본형 스트림(IntStream 등등)

난수를 요소로 갖는 기본형 스트림(new Random()ints()를 이용)

무한스트림[ iterate(), generate() ]

 

2) 스트림의 중간 연산

 

distinct() - 중복을 제거

limit(5) - 5개의 요소만 남김

skip(5) - 5개의 요소를 건너뜀

sorted() - 기본 정렬 / sorted(Comparator<T> c)

filter(Predicate<T> predicate) Predicatereturn값이 false인 요소를 스트림에서 제외시킴

 

map / flatmap 스트림의 요소를 변환함 ★★★

mapFunction 인터페이스를 매개변수로 받음.

ex) map(Integer::parseInt) : Stringint로 변환함

 

3) 스트림의 최종 연산

 

forEach 각 요소에 지정된 작업 수행

count() - 스트림의 요소의 개수를 반환

max / min 스트림의 최대값/최소값을 Optional<T>로 반환

findAny() 아무거나 / findFirst() 첫 번째 요소 스트림의 요소 하나를 반환

toArray() - 스트림의 요소를 Object 배열로 반환

 

reduce 스트림의 요소를 하나씩 줄여가면서 계산한다. ★★★

reduce는 매개변수로 identity(초기값)accumulator(이전 연산결과와 스트림의 요소에 수행할 연산)을 받음. 초기값이 없으면 반환타입이 Optional<T>가 됨.

 

collect 스트림의 요소를 수집한다. 주로 요소를 그룹화 하거나 분할한 결과를 컬렉션에 담아 반환하는데 사용된다. ★★★

(Optional<T> 객체가 스트림 최종연산의 결과로 이용되는 이유 : 스트림의 최종연산 결과가 null인 경우에 간접적으로 다룰 수 있게 하기 위해서)

 

주로 Collectors 클래스에 있는 메소드를 이용한다.

counting(), maxBy(), reducing() 등의 메소드는 그룹별로 해당 기능을 처리할 수 있다.

 

 

스트림의 그룹화와 분할 결과는 Map에 담겨 반환됨

 

partitioningBy()는 스트림의 요소를 2분할함 (Predicate를 이용해서 2분할함)

groupingBy()는 스트림의 요소를 n분할함 (Function을 이용해서 분할 기준을 만듦)

 

사용 방법이 메소드마다 다양해서 요약 정리만 간단하게 해놓고 나중에 기억이 나지 않는것만 직접 찾아보려고 함

'간단 요약' 카테고리의 다른 글

221206 SQLD 학습  (0) 2022.12.07
Vue.js 튜토리얼 정리  (0) 2022.11.20
데이터 모델링 Day 1  (0) 2022.08.01

+ Recent posts