Java의 Reduce 정의

    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()));
    		
    		
    	}
    
    }

    댓글

    Designed by JB FACTORY