Super Coding Addict
Ch12. 스트림 (2) 본문
* reduce() 연산
- 정의된 연산이 아닌, 프로그래머가 직접 지정하는 연산을 사용
- 배열의 모든 요소 합을 구하는 reduce연산
--> 연산이 간단하면 직접 구현
--> 연산이 복잡하면 BinaryOperator를 구현한 클래스를 넣으면 됨
* 예제
# ReduceTest 클래스
package ch12.stream;
import java.util.Arrays;
import java.util.function.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 = {"안녕하세요~~~", "hello", "Good morning", "반갑습니다"};
System.out.println(Arrays.stream(greetings).reduce("", (s1, s2)->
{ if(s1.getBytes().length >= s2.getBytes().length)
return s1;
else return s2;
}));
System.out.println(Arrays.stream(greetings).reduce(new CompareString()).get());
}
}
--> 인삿말을 담은 String타입의 greetings 배열 선언
--> 배열 요소 중 가장 byte 길이가 긴 요소를 출력하는 람다식 구현
( 한글은 한 문자에 2Bytes이므로 안녕하세요~~가 가장 byte길이가 길어 결과값은 안녕하세요~~가 나옴)
--> 구현한 람다식이 너무 복잡해보이므로 BinaryOperator인터페이스를 구현한 CompareString 클래스를 선언한 후 그 안에 람다식을 구현한 후, CompareString클래스 객체를 생성한 후 get()메서드로 결과값을 가져온다
'JAVA 문법' 카테고리의 다른 글
Ch15. 자바 Thread 프로그래밍 (1) (0) | 2021.02.14 |
---|---|
Ch13. 예외 처리 (0) | 2021.02.09 |
Ch12. 스트림 (1) (0) | 2021.02.06 |
Ch12. 람다식 (2) (0) | 2021.02.06 |
Ch12. 람다식 (1) (0) | 2021.02.06 |