개발/java

Stream.of vs Arrays.stream

캐리캐리 2021. 12. 23. 23:09

배열을 받아서  가공의 편의성을 위해 이를 스트림으로 변환을 한다고 할때 Stream.of 와 Arrays.stream 둘다 사용을 할 수 있습니다. 

왜 굳이 자바에서 두개를 만들어서 .. 넣었을까 .. 궁금증이 생겼습니다. 

둘은 3가지의 차이점이 있습니다. 

 

1.반환 유형이 다릅니다. 

int[]  temp = {1, 2, 3, 4, 5};
Stream<int[]> test1_1 =  Stream.of(temp);
IntStream test1_2 =Arrays.stream(temp);

2. Stream.of는 가공을 한번 더 거쳐야 합니다. 

Stream.of(temp).forEach(t-> System.out.print(t+",")); //결과값 [I@17f6480,
Stream.of(temp).flatMapToInt(Arrays::stream).forEach(t-> System.out.print(t+",")); //결과값 1,2,3,4,5,

3.Stream.of는 제네릭으로 인해 모든것이 사용가능한 반면  Arrays.stream은 int , long , double , String 만 가능합니다. 

float[] temp1 = {1, 3, 4, 5};
Arrays.stream(temp1); //컴파일 에러

 

차이점을 보시면 굳이 귀찮다 .. 싶으면 Stream.of로 하는게 맞는데 Arrays.stream으로 해보고 컴파일 에러가 보인다 하면 그때 Stream.of를 사용하는게 성능상 이점은 분명 있을 것 같습니다. 

 

cf) 자바에서도 추천합니다.

별도 클래스로 리스트를 만들거나