reduce() 연산
- 정의된 연산이 아닌 프로그래머가 직접 구현한 연산
- 최종 연산으로 스트림의 요소를 소모하며 연산을 수행
- reduce() 메서드의 두번째 요소로 전달되는 람다식에 따라 다양한 기능을 할 수 있음
- 람다식을 직접 구현하거나 람다식이 긴 경우 BinaryOperator를 구현한 클래스를 사용함
- 배열의 모든 요소 합을 더하는 reduce() 연산 구현 예
Arrays.stream(arr).reduce(0, (a, b) -> a + b); // 매개변수 초기값, 람다식
예제 코드
ReduceTest.java
package ch06;
import java.util.Arrays;
import java.util.function.BinaryOperator;
class CompareString implements BinaryOperator<String>{ // BinaryOperator를 구현한 클래스
@Override
public String apply(String s1, String s2) { // apply() 추상메서드 구현
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", "반갑습니다"};
String str1 = Arrays.stream(greetings).reduce("", (s1,s2) -> { // 직접 람다식 입력
if( s1.getBytes().length >= s2.getBytes().length) return s1;
else return s2;
});
System.out.println(str1);
String str2 = Arrays.stream(greetings).reduce(new CompareString()).get(); // BinaryOperator 구현한 클래스 이용
System.out.println(str2);
}
}
'Java & Kotlin' 카테고리의 다른 글
[Java 기능] 스트림 활용 (0) | 2022.02.15 |
---|---|
[Java 기능] 스트림 (0) | 2022.02.15 |
[Java 기능] 객체지향 프로그래밍 vs 람다식 (0) | 2022.02.14 |