Java의 Reduce 정의
- 프로그래밍 언어/JAVA
- 2021. 10. 22.
Reduce 연산
- Reduce는 정의된 연산이 아닌, 프로그래머가 원하는 연산을 디자인 할 수 있다.
- Reduce는 Stream의 최종연산이 되며, Stream을 Return한다. Stream을 Return 하기 때문에 각 요소는 소모된다.
- Reduce는 아래 두 가지 형태가 있음.
// 1) 람다식을 활용한 reduce
Stream.reduce(초기값, 람다식)
// 2) Binary Operator<T> 클래스를 구현한 인스턴스
Stream.reduce(Binary Operator<T>가 구현된 인스턴스)
1번은 초기값을 넣은 후, 람다식으로 원하는 연산을 중괄호를 이용해 구현하면 된다. 1번에 대한 코드는 아래와 같다.
public class ReduceTest {
public static void main(String[] args) {
// 문자열 중에 가장 긴 것만 반환하도록 한다.
String[] myList = {"안녕하세요오오오오오오오", "ㅎㅇㅎㅇ요", "abcdefghijklmnopqrstuvwxyz"};
System.out.println(Arrays.stream(myList).reduce("", (s1,s2) ->{
if (s1.length() > s2.length()) return s1;
return s2;
}));
2번은 Binary Operator<T>의 구현 클래스를 만들고, 그 구현 클래스의 인스턴스를 생성자를 통해생성해서 reduce에 넣어주면 된다. 이 때, implements Binary Operator를 할 때 <>에는 비교하고자 하는 자료형이 들어가면 된다. 그리고 인터페이스 구현에 필요한 메서드만 Override 해주면 된다.
class ComparingString implements BinaryOperator<String>{
@Override
public String apply(String s1, String s2) {
if (s1.length() > s2.length()) return s1;
else return s2;
}
}
public class ReduceTest {
public static void main(String[] args) {
// 문자열 중에 가장 긴 것만 반환하도록 한다.
// 함수를 구현한 객체를 생성해서 넣는다.
String[] myList = {"안녕하세요오오오오오오오", "ㅎㅇㅎㅇ요", "abcdefghijklmnopqrstuvwxyz"};
System.out.println(Arrays.stream(myList).reduce(new ComparingString()));
}
}
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바의 Object Class (0) | 2021.10.23 |
---|---|
Java의 여러 내부 클래스 정의, 유형 (0) | 2021.10.23 |
Java의 Lambda Expression(람다식) (0) | 2021.10.22 |
자바 기초 정리 : 상속, 인터페이스 (0) | 2021.10.21 |
자바 강의 듣고 정리 (0) | 2021.10.19 |