-
정수(Primitive type) 배열을 리스트로 변환하기오답 노트 2023. 10. 13. 11:19
아주 간단한 문제였으나, 의외로(?) 나는 헤매이고 있었다.
정수형 Primitive type인 int 배열을 자바에서 제공해주는 Util 클래스인 Arrays를 활용해 손쉽게 List로 변경할 수 있을 것이라 생각했지만, 큰 착각이었다.
너무나도 당연하게 오토 박싱 작업이 진행되고 너무나도 당연히 List 형태로 int를 활용할 수 있을 것이라 생각했다.
int[] primitiveArr = {1, 2, 3}; // int 형의 배열 List<int[]> ints = Arrays.asList(primitiveArr); // Arrays.asList를 활용하였으나 // 결과는 List<int[]>를 반환!!
결과는 List<int[]> 이라는 해괴한 모습의 리스트가 만들어져버렸다💩
조금 찾아보니 이 이뉴는 유형 비호환성으로 인한 오토 박싱 작업 불가였다.
즉, 오토 박싱(int를 Integer로 자동 변환해주는 좋은 녀석) 작업은 단일 요소에 대해서만 발생하게 된다.
쉽게말해서 갑자기 배열을 들이밀더니 '이거 풀어서 Integer로 예쁘게 포장해서 List로 내놔' 하니까 '꺼져' 한거다.
그럼 어떻게 해야할까?
손쉽게 할 수 있는 방법은 Array를 Stream으로 풀어 boxed작업을 직접 해주면 된다.
int[] primitiveArr = {1, 2, 3}; // int 형의 배열 List<int[]> ints = Arrays.asList(primitiveArr); // Arrays.asList를 활용하였으나 // 결과는 List<int[]>를 반환!! // --> 귀찮으면 내가 할게. List<Integer> integers = Arrays.stream(primitiveArr).boxed().toList();
int 요소 하나하나 Integer로 곱게 포장해서 integers라는 리스트에 담는 작업을 해주면 된다.
이러면 자바도 화 안내고 좋다.
'오답 노트' 카테고리의 다른 글