1. 개요

이 짧은 예제에서는 프리미티브 배열을 해당 유형의 객체 List 으로 변환하는 방법을 보여줍니다 . 일반적으로 Java에서 오토 박싱 을 사용하려고 할 수 있습니다 . 그러나 다음 섹션에서 살펴 보 겠지만 오토 박싱의 작동 방식에 대한 우리의 직관은 종종 잘못 될 수 있습니다.

2. 문제

문제의 정의부터 시작하겠습니다. 프리미티브 배열 ( int [] )이 있고 그 배열을 List ( List <Integer> ) 로 변환하려고 합니다. 직관적 인 첫 번째 시도는 다음과 같습니다.

int[] input = new int[]{1,2,3,4};
List<Integer> output = Arrays.asList(input);

불행히도 이것은 유형 비 호환성으로 인해 컴파일되지 않습니다 . 오토 박싱이 프리미티브 배열과 함께 작동 할 것으로 예상 할 수 있습니다. 그러나이 본능적 인 믿음은 사실이 아닙니다.

오토 박싱은 단일 요소에 대해서만 발생합니다 (예 : int 에서 Integer ). 기본 유형의 배열에서 박스형 참조 유형의 배열로 자동 변환되지 않습니다 (예 : int [] 에서 Integer []로 ).

이 문제에 대한 몇 가지 해결책을 구현해 보겠습니다.

3. 반복

오토 박싱은 단일 기본 요소와 함께 작동하므로 간단한 해결책은 배열의 요소를 반복하고 List에 하나씩 추가하는 것입니다 .

int[] input = new int[]{1,2,3,4};
List<Integer> output = new ArrayList<Integer>();
for (int value : input) {
    output.add(value);
}

우리는 문제를 해결했지만 해결책은 매우 장황합니다. 이것은 다음 구현으로 이어집니다.

4. 스트림

Java 8부터는 Stream API를 사용할 수 있습니다 . Stream을 사용하여 단선 솔루션을 제공 할 수 있습니다 .

int[] input = new int[]{1,2,3,4};
List<Integer> output = Arrays.stream(input).boxed().collect(Collectors.toList());

또는 IntStream을 사용할 수 있습니다 .

int[] input = new int[]{1,2,3,4};
List<Integer> output = IntStream.of(input).boxed().collect(Collectors.toList());

이것은 확실히 훨씬 더 좋아 보인다. 다음으로 몇 개의 외부 라이브러리를 살펴 보겠습니다.

5. 구아바

구아바 라이브러리는이 문제의 래퍼를 제공합니다 . Maven 의존성 을 추가하여 시작하겠습니다 .

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>29.0-jre</version>
    <type>bundle</type>
</dependency>

다른 기본 유형에 대해 유사한 유틸리티 클래스와 함께 Ints.asList ()를 사용할 수 있습니다.

int[] input = new int[]{1,2,3,4};
List<Integer> output = Ints.asList(input);

6. 아파치 커먼즈

또 다른 라이브러리는 Apache Commons Lang 입니다. 다시이 라이브러리에 Maven 의존성을 추가해 보겠습니다.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

보다 정확하게는 ArrayUtils 클래스를 사용합니다 .

int[] input = new int[]{1,2,3,4};
Integer[] outputBoxed = ArrayUtils.toObject(input);
List<Integer> output = Arrays.asList(outputBoxed);

7. 결론

이제 도구 상자에 기본 요소 배열을 List 로 변환하는 몇 가지 옵션이 있습니다 . 지금까지 살펴본 것처럼 오토 박싱은 단일 요소에 대해서만 발생합니다. 이 예제에서는 변환을 적용하기위한 몇 가지 솔루션을 살펴 보았습니다 .

항상 그렇듯이 기사의 전체 소스 코드는 GitHub에서 사용할 수  있습니다 .