영호
[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 |
Comments