-
Integer타입의 list를 array로 바꾸기개발/Java 2021. 1. 10. 15:08
다음은 ArrayList에 값을 넣고 이것을 배열로 바꿔서 리턴하는 예제다.
public int[] solution(int[] numbers) { List<Integer> answer = new ArrayList<>(); for (int i = 0; i < numbers.length; i++) { answer.add(numbers[i]); } // return (int[]) answer.toArray(); // 컴파일 에러 // return (Integer[]) answer.toArray(); // 컴파일 에러 return answer.stream() .mapToInt(x -> x) .toArray(); }
여러 방법을 시도해봤다.
-
(int[]) answer.toArray();
Object타입이 int값을 갖는게 확실하다면 다음 코드처럼 object -> int 변환이 가능하다.Object o = (Object) 1; int a = (int) o
그러나, object 배열 -> int 배열은 컴파일 에러가 발생한다.
-
(Integer[]) answer.toArray();
컴파일러가 런타임에 Integer를 int로 unbox 하니까, 배열도 가능할까 싶어서 시도해봤다.
1번에서 문제였던 Object[]에서 Integer[]로 캐스팅은 가능했지만, return하는 과정에서 타입 에러가 발생했다.
Integer -> int처럼 간단하게 생각했지만, 배열이 됬을 땐 다른 문제인듯 했다.
해결 - mapToInt()
자바8 이상이라는 가정하에
return answer.stream() .mapToInt(x -> x) .toArray();
이렇게 해결했다.
stream을 생성하고
mapToInt()
를 이용해 Integer 타입 원소들을 int로 바꿔주고.toArray()
로 배열을 만들었다.자바8을 열심히 공부하자. 정말 편하다!
-