반응형
Stream API 에서는 커스텀하기 집계 결과물을 만드는 reduce()
라는 메소드를 제공한다.
(sum(), average(), count(), max(), min() 말고도 커스텀하게 사용할 경우 사용)
Stream, IntStream, LongStream, DoubleStream 각 인터페이스에는 reduce() 메소드가 오버로딩
되어 있다.
(매개타입 XXXOperator, 리턴 타입 OptionalXXX, int, long, double)
스트림 요소가 전혀 없을 경우 디폴트 값인 identity 매개값이 리턴된다.
XXXOperator 매개값은 집계 처리를 위한 람다식 을 대입하는 곳이다.
public static void main(String[] args){
List<Worker> workerList = Arrays.asList(
new Worker("강성현", 30),
new Worker("깡냉", 20),
new Worker("까랭", 15)
);
// 집계함수 sum() 이용
int sum1 = workerList.stream()
.mapToInt(Worker::getAge)
.sum();
// custom한 집계함수 reduece 이용 => stream에 element가 없을시 오류 남
int sum2 = workerList.stream()
.map(Worker::getAge)
.reduce((a,b) -> a+b)
.get();
// reduce를 이용하여 identity(디폴트값 설정) => stream에 element가 없으면 0을 리턴함
int sum3 = workerList.stream()
.map(Worker::getAge)
.reduce(0, (a,b) -> a+b);
System.out.println("sum1 : " + sum1);
System.out.println("sum2 : " + sum2);
System.out.println("sum3 : " + sum3);
}
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] Consumer 함수적 인터페이스(Functional Interface) (0) | 2019.07.01 |
---|---|
[JAVA] java.util.function FunctionalInterface(함수적 인터페이스) 종류 (0) | 2019.06.30 |
[JAVA] Stream 기본집계 (0) | 2019.06.30 |
[JAVA] Stream Looping(루핑, peek(), forEach()) (0) | 2019.06.17 |
[JAVA] Stream 정렬(sorted()) (0) | 2019.06.17 |