java int 배열을 List로 변환

2023. 9. 14. 17:13 기타 정보/코딩테스트

지난번 포스팅을 참조하면,

배열을 List로 변환할 때,

Arrays.asList() 메소드를 사용하면 됩니다.

 

하지만, 배열의 원소가 int와 같은 primitive type인 경우

Arrays.asList()는 좀 다른 결과를 리턴합니다.

 

0. Arrays.asList()로 int 배열 변환하기 - Fail

  코드  

 

import java.util.Arrays;
import java.util.List;
 
public class IntArrayConvertToList {
    public static void main(String[] args) {
        
        // int 배열
        int[] arr = { 1, 2, 3 };
 
        // Arrays.asList() 
        List<int[]> intList = Arrays.asList(arr);
 
        // 결과 출력
        System.out.println(intList.size()); // 1
        System.out.println(intList.get(0)); // I@71bb301
        System.out.println(Arrays.toString(intList.get(0)));  // [1, 2, 3]
 
    }
}

  결과  

1
[I@71dac704
[1, 2, 3]

Arrays.asList()에 int 배열을 파라미터로 전달했을 때 나오기 기대했던 결과는

3개의 element를 가지고 있는, List 타입입니다.

하지만, 실제로는 1개의 element를 가지고 있는, List<int[]> 타입이 리턴되었습니다.</int[]>

Arrays.asList() 메소드는,

primitive 타입을 Wrapper 클래스로(여기서는 int에서 Integer로) 형변환해주지 않기 때문에,

primitive 타입의 배열은, Arrays.asList()로는 List로 변환할 수 없습니다.

 

따라서, int와 같은 primitive 타입의 배열은 다른 방법을 사용해야 합니다.

 

 

 

1. 반복문 사용하기

  코드  

public class IntArrayConvertToList {
    public static void main(String[] args) {
        
        // int 배열
        int[] arr = { 1, 2, 3 };
 
        // int -> List
        List<Integer> intList = new ArrayList<>();
        for (int element : arr) {
            intList.add(element);
        }
        
        // List 출력
        System.out.println(intList.size()); // 3
        System.out.println(intList); // [1, 2, 3]
 
    }
}

  결과  

3
[1, 2, 3]

int 배열은 Arrays.asList()를 사용할 수 없으므로,

위와 같이 반복문을 사용하여

배열을 List로 변환할 수 있습니다.

 

 

 

2. Stream 사용하기

  코드  

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class IntArrayConvertToList {
    public static void main(String[] args) {
        
        // int 배열
        int[] arr = { 1, 2, 3 };
 
        // int -> List
        List<Integer> intList 
                = Arrays.stream(arr)
                        .boxed()
                        .collect(Collectors.toList());
        
        // List 출력
        System.out.println(intList.size()); // 3
        System.out.println(intList); // [1, 2, 3]
 
    }
}

  결과  

3
[1, 2, 3]

Java 8 이후부터는 Stream을 사용할 수 있습니다.

여기서 boxed() 메소드는 Primitive Stream 값들을 Wrapper Class로 바꿔줍니다.

그후, collect(Collectors.toList())를 이용하여, 주어진 stream을 List로 변경해 줄 수 있습니다.

 


 

double, long 등 다른 primitive 타입의 배열도 위와 같은 방법으로 

배열을 List로 변환할 수 있습니다.

 

출처 : https://hianna.tistory.com/552