본문 바로가기

🧑🏻‍💻 Dev/Java

[Java] 자바 정수형 배열을 리스트로 변환하기

간단한 문법의 활용이긴 하지만, 사용할 때마다 헷갈려서 기록해두려고 한다. 

 

1. Integer[] 배열을 List<Integer>로 변환

Integer[] 배열을 만들어서 List<Integer>로 만드는 방법은 매우 간단하다.

// 배열
Integer[] array1 = new Integer[]{1, 2, 3, 4, 5, 6, 7};

// 변환한 리스트
List<Integer> list1 = Arrays.asList(array1);

이는 Integer는 오브젝트이기 때문에 별다른 중간 작업이 필요없이 Arrays.asList()로만으로 변환이 가능하다.

 

 

2. int[] 배열을 List<Integer>로 변환

위에 Integer와는 다르게 int는 오브젝트가 아닌 기본형 타입이기 때문에 위와 같이 코드를 작성하면 어떻게 될까?

java: incompatible types: inference variable T has incompatible bounds
    equality constraints: java.lang.Integer
    lower bounds: int[]

위와 같은 컴파일 에러가 발생한다. List는 제너릭을 사용해서 Integer라는 Wrapper 객체를 받아야 하는데, int[]는 기본형 타입이기 때문이다. 그럼 어떻게 해줘야할까? 자바의 Stream을 사용하면 int[] 배열의 모든 인자를 Wrapper 클래스로 바꿔준 후 List로 변환할 수가 있다. 한번 코드로 작성해보자.

// 배열
int[] array1 = new int[]{1, 2, 3, 4, 5, 6, 7};

// 변환한 리스트
List<Integer> list1 = Arrays.stream(array1).boxed().collect(Collectors.toList());

위 코드를 해석해보면 먼저, array1 배열을 stream으로 만든 후에 boxed() 메소드를 적용하면 int 기본형 타입을 모두 Wrapper 클래스로 변환시켜 줍니다. 그 후 collect()를 사용해서 List로 변환시켜 줍니다. 

 

 

3. List<Integer> 리스트를 int[] 배열로 변환

위에서 기본형 타입인 int 배열을 Stream을 사용해서 List<Integer>로 변환해봤다. 이제 반대로는 어떻게 변환할 수 있을까? 반대로 변환할 때도 Stream을 써볼 것이다.

// 리스트
List<Integer> list1 = List.of(1, 2, 3, 4, 5, 6, 7);

// 변환한 배열
int[] array1 = exList.stream().mapToInt(Integer::intValue).toArray();

새로운 메소드가 나왔다. mapToInt() 이다. 해당 메소드를 위와 같이 mapToInte(Integer::intValue)로 사용하면 리스트에 있는 Wrapper 타입의 인자들을 하나씩 돌면서 기본형 타입인 int로 변환해줍니다. 그리고 마무리로 toArray() 메소드를 통해서 배열로 변환할 수 있습니다.

 

생각보다 int[]를 List<Integer>로 변환하는 경우가 좀 있었던 거 같아서 이렇게 기록해두려고 했다. 이제는 안 까먹어야지. 😄