영호
[JAVA] Array를 stream으로 (Arrays.stream() vs Stream.of()) 본문
개요
stream을 공부하면서 Array를 stream으로 만드는 방법이 2가지가 있는 것을 알았고, 2가지 방법의 차이점에 대해 궁금증이 생겨 알아본 내용입니다.
Collection이 아닌 Array를 stream으로 만들 때 2가지 방법이 있습니다.
- Arrays.stream()
- Stream.of()
위 2가지 방법은 parameter로 primitive타입의 배열을 넘기느냐, non-promitive타입의 배열을 넘기느냐에 따라 반환 값이 달라집니다.
Stream.of()
primitive타입 배열로 Stream.of() 호출했을 때 실행되는 코드
public static<T> Stream<T> of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
// int배열의 반환타입 : Stream<int[]>
non-primitive타입 배열로 Stream.of() 호출했을 때 실행되는 코드
@SafeVarargs
@SuppressWarnings("varargs") // Creating a stream from an array is safe
public static<T> Stream<T> of(T... values) {
return Arrays.stream(values);
}
// Integer배열의 반환타입 : Stream<Integer>
- Stream.of()의 경우 primitive, non-primitive에 상관없이 모두 Stream객체가 반환됩니다.
Arrays.stream()
primitive타입 배열로 Arrays.stream() 호출했을 때 실행되는 코드
public static IntStream stream(int[] array) {
return stream(array, 0, array.length);
}
// int배열의 반환타입 : IntStream
non-primitive타입 배열로 Arrays.stream() 호출했을 때 실행되는 코드
public static <T> Stream<T> stream(T[] array) {
return stream(array, 0, array.length);
}
// Integer의 반환타입 : Stream<Integer>
- Arrays.stream()의 경우 primitive타입을 넘기면 해당 타입에 맞는 기본형 stream이 반환됩니다.
- non-primitive의 경우 Stream객체가 반환됩니다.
결론
- stream.of()의 경우 primitive, non-primitive 상관없이 Stream객체를 반환하지만,
- Arrays.stream()의 경우 primitive는 그에 맞는 기본형 stream, non-primitive는 Stream객체가 반환됩니다.
- 세부적인 이유까지 찾아보려 했지만, 본 포스팅 정도로만 찾아볼 수 있었습니다.
- Github Link에 자세한 구현 코드가 있으니 더 알아보고 싶으신 분들은 참고하시면 좋을 거 같습니다:)
'Language > JAVA' 카테고리의 다른 글
eqauls, hashCode(feat. 동일성과 동등성) (0) | 2023.03.04 |
---|---|
[JAVA] HashMap을 이용해 Enum인스턴스 조회하기 (0) | 2022.12.13 |
[JAVA] instance method vs static method (0) | 2022.10.04 |
[Java] Map인터페이스 - HashMap (0) | 2022.06.25 |
[Java] List인터페이스 - LinkedList (0) | 2022.06.16 |