자바 - primitive type을 list로 바꾸기

namkun·2023년 1월 1일
0

JAVA

목록 보기
14/20

보통 배열을 List로 바꿀 때 Arrays.asList를 사용하는 경우가 있을텐데, Char[]에 대해서는 우리가 원하는 것처럼 List<Character>가 되지 않고 List<char[]>로 나온다.

왜 그런 것일까?

Arrays.asList 메서드는 primitive 타입을 Wrapper 클래스 (ex> int to Integer, char to Character) 로 형변환을 해주지 않는다.
그렇기에 그냥 통째로 char[], int[]로 리스트 변환을 해버리는 것이다.

따라서 위와 같은 primitive 타입은 다른 변환과정을 거쳐야 한다.

두 가지 방법이 있는데,

  1. 반복문으로 변환하기
  2. stream으로 변환하기

오늘은 stream으로 변환하는 방법만 알아보도록 하겠다. (java 8 이후로만 가능)

char[] charArr = {'a','b','c'};
int[] intArr = {1, 2, 3};

List<Character> charList = IntStream
                            .range(0, charArr.length)
                            .mapToObj(i -> charArr[i])
                            .collect(Collectors.toList());

List<Integer> intList = Arrays.stream(intArr)
								.boxed()
                                .collect(Collectors.toList());

char는 IntStream으로 변환한 뒤 mapToObj를 통해서 Wrapper 클래스로 형 변환하고,

int는 boxed를 통해서 Wrapper 클래스로 변환한다.


관련해서 보다보니 궁금한 것이 하나 생겼다.

왜 char 배열은 Arrays.stream 메서드가 아닌 IntStream을 이용해서 범위로 처리할까?

이유는 stream에 존재하는 primitive 타입의 stream은 int, double, long만 존재하기 때문이다.

그렇기에 mapToObj를 통해서 wrapper 클래스로 형변환을 하나하나 시켜주는 것이다.

profile
개발하는 중국학과 사람

0개의 댓글