Reduce() 연산
정의된 연산이 아닌 프로그래머가 직접 지정하는 연산을 적용
최종 연산으로 스트림의 요소를 소모하며 연산 수행
배열의 모든 요소의 합을 구하는 reduce연산
기존의 연산이 아닌 내가 연산을 구현
Arrays.stream(arr).reduce(0,(a,b) -> a+b));
0은 초기값 문자일시 “”
배열에서는 Arrays 로 스트림을 생성한다. 스트림에 배열 객체를 넣고 reduce() 메소드를 실행
처음값은 초기값을 넣고 그다음 매개변수 2개를 넣는다 연산을 정의한다.
package stream;
import java.util.Arrays;
public class IntArrayTest {
public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
int[] arr2 = {6,7,8,9};
System.out.println(Arrays.stream(arr).reduce(0, (a,b) -> a+b));// 전체를 다 더하게 됨 sum이랑똑같이 나오는데 직접 연산정의
}
}
배열의 요소에서 가장 긴 문자를 추출하기
스트림에 람다식을 사용할수있다. ( 조건식이 있을경우 )
바이트 단위이니까 getBytes().length 로 뽑는다.
만약 이것이 너무 길다고 생각하면
package stream;
import java.util.Arrays;
public class ReduceTest {
public static void main(String[] args) {
String[] greetings = {"안녕하세요","hello","Good"};
// 가장 긴애를 반환해주는
System.out.println(Arrays.stream(greetings).reduce("",(s1,s2)->
{ // 조건문이 들어가니 중괄호 , getBytes 는 한글은 2바이트씩이니까
if(s1.getBytes().length >= s2.getBytes().length)
// s1과 s2를 비교를해서 길이가 더 긴애를 반환을 해준다.
return s1;
else
return s2;
}));
}
}
직접 클래스를 만들어서 BinaryOperator<String> 을 상속받아서
apply메소드에 구현하는 방법이있다.
main 메소드에서
배열을 만들고 Arrays.Stream(arr).reduce(new 클래스명()).get // get은 얻어오다 라는 뜻
package 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 ReduceTest2 {
public static void main(String[] args) {
String[] arr = {"안녕하세요","Hello","NiceMeetoyou"};
System.out.println(Arrays.stream(arr).reduce("",(a,b)->
{
if(a.getBytes().length >= b.getBytes().length)
return a;
else
return b;
}));
// 결과를 get으로 받고 reduce에 위에 구현한 클래스를 넣는다.
System.out.println(Arrays.stream(arr).reduce(new CompareString()).get());
}
}
'JAVA Programming' 카테고리의 다른 글
[78] 파일 넣기 , FileInputStream fis = new FileInputStream(fileName); (0) | 2020.07.21 |
---|---|
[77] 예외와 예외처리 (0) | 2020.07.21 |
[75] 스트림 - 연산을 위한 객체 filter,map,sum,count,forEach (0) | 2020.07.21 |
[74] 스트림 이란 ? 중간연산(map,filter) , 최종연산(forEach) (0) | 2020.07.20 |
[73] 람다식 이란? (0) | 2020.07.20 |