Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch12. 스트림 (2) 본문

JAVA 문법

Ch12. 스트림 (2)

밍응애 2021. 2. 6. 12:59

*  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