봄수의 연구실

Java의 Reduce - 🐥 카카오 테크 캠퍼스 본문

DEV/Java

Java의 Reduce - 🐥 카카오 테크 캠퍼스

berom 2023. 5. 2. 21:38

Java의 Reduce()

Java의 reduce() 연산은 프로그래머가 정의한 연산을 스트림의 요소에 적용합니다.

T reduce(T identity, BinaryOperator<T> accumulator)
  • reduce() 메서드의 두 번째 인수는 람다 식 또는 작업을 지정하는 BinaryOperator 구현 클래스입니다.
  • reduce() 작업은 최종 작업이 호출될 때 수행되며 스트림의 요소를 소비합니다.
  • reduce() 작업의 결과는 두 번째 인수로 전달된 람다 식 또는 BinaryOperator 구현 클래스에 의해 결정됩니다.

예: reduce() 작업을 사용하여 배열에 있는 모든 요소의 합을 찾습니다.

Arrays.stream(arr).reduce(0, (a,b)->a+b);

reduce() 메서드의 두 번째 인수는 (a,b) -> a+b 두 값 ab를 더하고 결과를 반환하는 람다 식 (a,b) -> a+b입니다.

또한 reduce() 메서드의 두 번째 인수로 전달되는 람다 식은 더 복잡한 작업을 위해 BinaryOperator 구현 클래스로 대체될 수 있습니다.
이 경우 문자열 배열에서 가장 긴 문자열을 찾기 위해 BinaryOperator<String> 인터페이스를 구현합니다

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

이 클래스를 reduce() 메서드의 두 번째 인수로 사용하여 문자열 배열에서 가장 긴 문자열을 찾을 수 있습니다.

String[] greetings = {"안녕하세요~~~", "hello", "Good morning", "반갑습니다^^"};
Arrays.stream(greetings).reduce(new CompareString()).get();

위의 예에서 reduce() 작업은 CompareString 클래스를 사용하여 문자열 배열에서 가장 긴 문자열을 찾습니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90