[Java] 스트림(Stream) - reduce()
2022. 2. 26. 14:02ㆍBack-end/Java
reduce() 연산
- 정의된 연산이 아닌 프로그래머가 직접 구현한 연산을 적용한다
- 최종 연산으로 스트림의 요소를 소모하며 연산을 수행한다
// 배열의 모든 요소의 합을 구하는 reduce() 연산 구현
Arrays.stream(arr).reduce(0, (a, b) -> a + b));
- reduce() 메서드의 두 번째 요소로 전달되는 람다식에 따라 다양한 기능을 수행할 수 있다
- 람다식을 직접 구현하거나 람다식이 긴 경우 BinaryOperator를 구현한 클래스를 사용한다
배열 안에 있는 문자열 중 가장 긴 문자열 찾기
import java.util.Arrays;
import java.util.function.BinaryOperator;
// BinaryOperator를 구현한 클래스
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[] = { "hi", "hello", "안녕", "안녕하세요" };
// 람다식으로 직접 구현
System.out.println(Arrays.stream(greetings).reduce("", (s1, s2) -> {
if (s1.getBytes().length >= s2.getBytes().length)
return s1;
else
return s2;
}));
// BinaryOperator 구현 클래스를 사용
String str = Arrays.stream(greetings).reduce(new CompareString()).get();
System.out.println(str);
}
}
반응형
'Back-end > Java' 카테고리의 다른 글
[Java] 자바에서 예외(Exception) 처리를 하는 이유 (0) | 2022.02.26 |
---|---|
[Java] 스트림(Stream) 활용 예제 (0) | 2022.02.26 |
[Java] 스트림(Stream) (0) | 2022.02.24 |
[Java] 객체 지향 프로그래밍 vs 람다식 (0) | 2022.02.23 |
[Java] 함수형 인터페이스로 람다식 구현 (0) | 2022.02.22 |