컴퓨터공학 💻 도서관📚
Part2. 6-6 연산 수행에 대한 구현을 할 수 있는 reduce()연산 (Stream의 메서드) 본문
			✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습
			
		Part2. 6-6 연산 수행에 대한 구현을 할 수 있는 reduce()연산 (Stream의 메서드)
들판속초록풀 2025. 7. 29. 23:33reduce() 는 Stream의 메서드이고 최종연산이다.
스트림에 대해서 하고 싶은 특정 연산을 직접 정의할 수 있는 연산을 알아보자
reduce() 연산
- 정의된 연산이 아닌 프로그래머가 직접 구현한 연산을 적용
 
T reduce(T identify, BinaryOperator<T> accumulator)
// 배열의 모든 요소의 합을 구하는 reduce() 연산 구현 예
Arrays.stream(arr).reduce(0, (a,b)->a+b));  // 람다식을 넣은 경우 : add 함수 구현
- 1번째 매개변수는 기본값 ,  
2번째는 BinaryOperator 라는 인터페이스를 구현한 부분인데 이 부분은 람다식을 직접 쓸 수도 있고
여기에 쓸 람다식이 좀 길때는 BinaryOperator를 implement한 클래스를 넣어도 된다. - reduce() 메서드의 두 번째 요소로 전달되는 람다식에 따라 다양한 기능을 수행 할 수 있음
 - 2번째 연산이 자료를 다 소진할 때까지 반복된다 (a, b 값이 재귀함수처럼 계속 전달되면서 연산이 된다)
 - 최종 연산으로 스트림의 요소를 소모하며 연산을 수행
 
BinaryOperator를 구현하여 배열에 여러 문자열이 있을 때 길이가 가장 긴 문자열 찾기 예
// BinaryOperator는 인터페이스여서 꼭 구현해야하는 메서드가 있다. 그것이 apply 메서드이다.
// apply 메서드는 내부적으로 순차적으로 호출이 된 2개의 인자를 받는다
class CompareString implements BinaryOperator<String>{
	@Override
	public String apply(String s1, String s2) {
		if (s1.getBytes().length >= s2.getBytes().length) return s1;
		else return s2;
	}
}
public class ReduceTest {
	public static void main(String[] args) {
		String[] greetings = {"안녕하세요~~~", "hello", "Good morning", "반갑습니다^^"};
		
		System.out.println(Arrays.stream(greetings).reduce("", (s1, s2)-> 
		                          {if (s1.getBytes().length >= s2.getBytes().length)   // 람다식 
				                                  return s1;
		                          else return s2;})); 
		                                                                               // 클래스 
		String str = Arrays.stream(greetings).reduce(new CompareString()).get(); //BinaryOperator를 구현한 클래스 이용
		System.out.println(str);                                      // get 메서드로 결과값 출력
		                          
	}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
| Part2. 6-8 예외 처리는 왜 해야 하나? 자바에서 제공되는 클래스들 (2) | 2025.08.08 | 
|---|---|
| Part2. 6-7 스트림을 활용하여 패키지 여행 비용 계산하기 (2) | 2025.07.29 | 
| Part2. 6-5 스트림(Stream : 통합 연산 도구) (3) | 2025.07.26 | 
| Part2. 6-4 객체지향 프로그래밍 vs. 람다식 구현 (2) | 2025.07.26 | 
| Part2. 6-3 함수형 인터페이스와 람다식 구현하여 사용하기 (0) | 2025.07.25 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				