Java
[Stream] 스트림 커스텀 집계 reduce
kwanghyup
2020. 6. 18. 12:53
1. public final OptionalInt reduce(IntBinaryOperator op)
import java.util.Arrays;
import java.util.List;
import java.util.function.IntBinaryOperator;
public class ReduceExam {
public static void main(String[] args) {
List<Person> list = Arrays.asList(
new Person("hong",99),
new Person("park",82),
new Person("lee",87),
new Person("kim",77)
);
// XXXBinaryOperator - applyAsXXX
int sum = list.stream().mapToInt(Person::getScore).reduce(new IntBinaryOperator() {
@Override
public int applyAsInt(int left, int right) {
return (left + right)+300; // 객체들의 총합에 300을 더함
}
}).getAsInt();
System.out.println(sum);
}
}
람다식
int sum = list.stream().mapToInt(Person::getScore)
.reduce((left, right) -> (left + right)+300).getAsInt();
System.out.println(sum);
2. public final int reduce(int identity, IntBinaryOperator op)
import java.util.ArrayList;
import java.util.List;
public class ReduceExam {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
int sum = list.stream().mapToInt(Person::getScore)
.reduce(0,(left, right) -> (left + right) + 50 );
//반환형 : int, getAsInt()할 필요 없음
// identity : 누적 함수의 항등값
System.out.println(sum);
}
}