반응형
    
    
    
  자바 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 | 
