Java

[Java] Integer ArrayList을 int 배열로 변환하는 방법

토발자 2023. 9. 24. 13:55
반응형

Integer ArrayList을 int 배열로 변환하는 방법에 대해 알아보자.

사실 자꾸 까먹어서 기록해둔다.

 


 

String 타입의 List를 배열로 변환할 때 toArray()를 사용하면 된다.

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

// 1. toArray() - 배열 선언과 동시에 할당
String[] arr = list.toArray(new String[0]); // ["a", "b", "c"]

// 2. toArray() - 배열 선언 후 값 할당
String[] arr2 = new String[list.size()];
list.toArray(arr2); // ["a", "b", "c"]

 

 


 

하지만 int형과 같은 primitive 타입은 toArray()를 사용할 수 없다.

이 때는 아래의 방법을 사용해보자.

 

public static void main(String args[]) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);

    // 방법 1 : 반복문 사용
    int[] arr1 = new int[list.size()]
    for (int i = 0; i < list.size(); i++)
        arr1[i] = list.get(i).intValue();

    // 방법 2 : stream 사용 (1)
    int[] arr2 = list.stream()
                .mapToInt(i -> i)
                .toArray();

    // 방법 3 : stream 사용 (2)
    int[] arr3 = list.stream()
                .mapToInt(Integer::intValue)
                .toArray();

    // 방법 4 : stream 사용 with filter
    int[] arr4 = list.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();
}

 

방법 1은 반복문을 사용한 가장 기본적인 방법으로 각 요소에 접근한 뒤 intValue 메서드를 사용해 int형으로 만든 후 배열에 넣는 방법이다.

 

방법 2와 3은 list를 stream으로 변환한 후, map을 이용해서 intStream을 가져오고, 그 후에 toArray()를 통해 배열로 만드는 방법이다.

차이점이 있다면 map 연산 시 int형으로 변경하는 방법에 차이가 있다.

방법 2는 Java가 자동으로 각 요소의 Integer 요소를 int형으로 unboxing 해주는 반면, 방법 3은 intValue 메서드를 통해 각 요소를 직접 int형으로 변경해준다.

 

방법 4는 방법 2에 filter를 추가해 list의 null을 필터링하는 방법이다.

반응형