반응형
자바 8 이상부터 가능한 Stream 기능 중, reduce에 대한 내용이다.
reduce() 동작 및 예제
1. .stream().reduce(identity value, accumulator function)
public class reduceEx {
public static void main(String[] args) {
List<Integer> numbers = List.of(1,2,3,4,5);
int sum = numbers.stream()
.reduce(0, reduceEx::sum); // ★
System.out.println(sum);
}
private static int sum(int a, int b) {
return a + b;
}
}
reduce() 는 stream의 요소를 하나의 결과값으로 반환한다.
첫 번째 매개변수는 identity value로 초기값을 의미하며, 두 번째로는 accumalator function 이다.
accumalator function을 직역하자면 축적함수인데 이번에는 람다식을 이용하여 좀 더 명확하게 동작을 살펴보자.
public static void main(String[] args) {
..
int sum = numbers.stream()
.reduce(0, (a,b) -> a+b); // ★
}
numbers에는 1~5 의 값이 있고 초기값은 0일 때 a와 b의 변화는 아래와 같다.
0 1 // a b
1 2
3 3
6 4
10 5
sum = 15
초기값을 시작으로 number의 값이 하나하나 축적되어 결과값을 반환했다는 것을 볼 수 있다.
2. reduce() 로 문자열 연산하기
public static void main(String[] args) {
List<String> st = Arrays.asList("a", "b", "c", "d", "e");
String result = st
.stream()
.reduce("", (x, y) -> x + y);
System.out.println(result);
}
숫자 연산과 동작이 같다.
3. reduce() 로 최대값, 최소값 구하기
numbers.stream().reduce(Integer.MIN_VALUE, (x,y) -> x>y ? x:y); // 최대값
numbers.stream().reduce(Integer.MAX_VALUE, (x,y) -> x>y ? y:x); // 최소값
reduce의 동작을 생각하며 최대값, 최소값을 구해보자.
정리
스프링 공부는 하면서 자바는 너무 소홀했던 것 같아 하나씩 정리해보려고 한다.
계속 쓰이는만큼 동작을 제대로 이해하여 어려움없이 사용하도록 하자.
반응형
'JAVA' 카테고리의 다른 글
[이펙티브자바] Item1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.10.15 |
---|---|
[Java] Access Level 에 관하여 (0) | 2023.09.24 |
[Java] stream.map() 동작 및 예제 (0) | 2023.08.20 |
[Java] record 사용방법 및 예제 (0) | 2023.08.06 |
[Java] stream.filter() 동작 및 예제 (0) | 2023.07.19 |