[Java] Integer List 를 int Array 로 변환하기

김민범·2024년 10월 22일
0

Java

목록 보기
1/8
post-thumbnail

알고리즘 문제를 풀다 ListArray 로 바꿔 return 해야되는 상황이였다.
간단하게 반복문을 사용할 수 있었지만, 짧게짧게 빨리빨리 끝내고싶어 toArray 사용
.
.
.
그러나

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[] {-1};
        }
        List<Integer> list = new ArrayList<>();

        int index = 0;
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
            if (arr[i] < min) {
                index = i;
                min = arr[i];
            }
        }
        list.remove(index);

        return list.toArray(new int[0]);
    }
}

에러발생

toArray로 하는게 아니였나.. 싶어 자료를 찾아보니

List.toArray(T[] a) 메서드는 배열을 파라미터로 받아 해당 타입의 배열을 반환하지만, 자바에서는 int[]가 기본 타입 배열이라 Integer[]와 호환되지 않는다.

String 리스트에선 문제 없이 작동했기에 지금까지 몰랐다

해결 방법

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
    int[] arr2 = list.stream()
                .mapToInt(i -> i)
                .toArray();
    
    // 방법 3
    int[] arr3 = list.stream()
                .mapToInt(Integer::intValue)
                .toArray();

    // 방법 4
    int[] arr4 = list.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();
  1. 하던대로 반복문을 사용하여 돌리기
    가장 간단한 해결방법이다.
  2. stream 사용
    방법 2, 3, 4 가 해당된다.

0개의 댓글