모든 원소를 하나씩 다 탐색하며 복사할 수도 있겠지만 그건 너무 비효율적이다. 더 간결한 방식으로 할 수 있는 List와 Array 간 형변환을 정리해보았다.
toArray()
List<Integer> list = new ArrayList<>();
// ...
Object[] arr = list.toArray();
toArray()
는 Object 타입의 배열을 반환한다.toArray(T[] a)
List<Integer> list = new ArrayList<>();
// ...
Integer[] arr = list.toArray(new Integer[0]);
toArray(T[] a)
는 T
타입 배열을 반환한다.T
는 값 타입이 될 수 없기 때문에 int, double, float와 같은 타입의 배열은 이 방법으로는 얻을 수 없다.a
의 길이는 0으로 지정하면 알아서 list
의 길이에 맞게 조정되어 arr
에 저장된다.stream
List<Integer> list = new ArrayList<>();
// ...
int[] arr = list.stream()
.mapToInt(Integer::intValue)
.toArray();
stream
이다.list.stream()
: Stream<Integer>
을 반환한다.mapToInt(Integer::intValue)
: Integer
의 intValue()
메서드를 참조해서 값타입인 int로 언박싱한다.toArray()
: IntStream
의 원소를 배열로 변환한다.Arrays.asList(T[] a)
String[] arr = {"a", "b", "c", "d"};
List<String> list = Arrays.asList(arr);
T
가 값 타입이 아닌 경우 위와 같이 간편하게 변환할 수 있다.stream
int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream()
.boxed()
.collect(Collectors.toList());
mapToInt()
과정을 통해 Integer를 int로 언박싱해준 것처럼, 여기서는 반대로 boxed()
를 통해 int를 Integer로 박싱해줘야 한다.IntStream
로 원소들을 넘겨받았으니 collect()
를 호출해서 List로 변환한다.