reduce() 연산

  • 연산 수행에 대한 구현을 할 수 있다
  • 정의된 연산이 아닌 프로그래머가 직접 구현한 연산을 적용한다
    T reduce('기본값', 인터페이스를 구현한 부분)
  • 최종 연산으로 스트림의 모든 요소로 연산을 수행한다
  • 예) 모든 요소의 합을 구하는 reduce() 연산 구현
Arrays.stream(arr).reduce(0, (a,b)->a+b)); 
//기본값 0에 (a,b)가 들어오면 a+b를 하여 반환해라
  • 람다식을 직접 구현하거나 람다식이 긴 경우에는 BinaryOperator를 구현한 클래스를 사용한다

실습 - 여러 문자열 중에 길이가 가장 긴 문자열 찾기

  • 직접 람다식으로 구현하기
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;}
     ));
  • 람다식이 너무 길어서 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;
    }
}
.
.
String str = Arrays.stream(greetings).reduce(new CompareString()).get();
System.out.println(str);
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글