개발/자바

자바 8) Stream.of vs Arrays.stream 차이점 (예제 - 배열 더하기)

kakk789 2023. 2. 7. 19:00
Stream.of 과 Arrays.stream 모두 배열, 컬렉션의 수 만큼 반복 수행하여 어떠한 작업을 수행시킬 때 사용한다.
하지만 약간의 차이점이 존재한다. 내가 찾은 바로는 Primitive type 을 처리할 때 차이가 발생했다.
예를들어 int [] 처리할 때

배열 내 모든 값을 더하는 예제

int[] strArrNum = {1,2,3,4};
sum1 = Arrays.stream(strArrNum).reduce(0,(s, s2) -> s + s2); // 10
//sum2 = Stream.of(strArrNum).reduce(0,(s, s2) -> s + s2);   // 에러

주석문에서 에러가 발생한다

- 나는 int[] 배열 을 넘겼는데 Stream.of의 정의를 보게 되면 결국 클래스 형식을 받게 되어 있다. 따라서 int [] 이 아닌 Integer 래퍼 클래스 [] 배열로 선언을 해야한다.

수정 완료1 Integer[] 선언

Integer[] strArrNum = {1,2,3,4};
sum1 = Arrays.stream(strArrNum).reduce(0,(s, s2) -> s + s2); // 10
sum2 = Stream.of(strArrNum).reduce(0,(s, s2) -> s + s2);   // 10

수정 완료2 flatMapToInt 함수를 사용하여 Array의 Stream 함수를 사용하여 변환

sum1 = Stream.of(strArrNum).flatMapToInt(Arrays::stream).reduce(0,(s, s2) -> s + s2);

추가로 문자열 길이 구해서 더하기 하는 예제 (stream 이용)

int sum3;
int sum4;
int sum5;
sum3 = Stream.of(strArr).mapToInt(s->s.length()).sum();
sum4 = Stream.of(strArr).map(s->s.length()).reduce(0,(a,b) -> Integer.sum(a,b));
sum5 = Arrays.stream(strArr).map(s->s.length()).reduce(0,(a,b) -> a+b);

System.out.println(sum3);
System.out.println(sum4);
System.out.println(sum5);
반응형