컴퓨터공학 💻 도서관📚
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