보통 배열을 List로 바꿀 때 Arrays.asList를 사용하는 경우가 있을텐데, Char[]에 대해서는 우리가 원하는 것처럼 List<Character>가 되지 않고 List<char[]>로 나온다.
왜 그런 것일까?
Arrays.asList 메서드는 primitive 타입을 Wrapper 클래스 (ex> int to Integer, char to Character) 로 형변환을 해주지 않는다.
그렇기에 그냥 통째로 char[], int[]로 리스트 변환을 해버리는 것이다.
따라서 위와 같은 primitive 타입은 다른 변환과정을 거쳐야 한다.
두 가지 방법이 있는데,
- 반복문으로 변환하기
- stream으로 변환하기
오늘은 stream으로 변환하는 방법만 알아보도록 하겠다. (java 8 이후로만 가능)
char는 IntStream으로 변환한 뒤 mapToObj를 통해서 Wrapper 클래스로 형 변환하고,
int는 boxed를 통해서 Wrapper 클래스로 변환한다.
관련해서 보다보니 궁금한 것이 하나 생겼다.
왜 char 배열은 Arrays.stream 메서드가 아닌 IntStream을 이용해서 범위로 처리할까?
이유는 stream에 존재하는 primitive 타입의 stream은 int, double, long만 존재하기 때문이다.
그렇기에 mapToObj를 통해서 wrapper 클래스로 형변환을 하나하나 시켜주는 것이다.