java int 배열을 List로 변환
지난번 포스팅을 참조하면,
배열을 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로 변환할 수 있습니다.
'기타 정보 > 코딩테스트' 카테고리의 다른 글
깊이 우선 탐색 (DFS) 정리 (1) | 2023.09.14 |
---|---|
너비 우선 탐색 (BFS) 정리 (0) | 2023.09.14 |
동적 계획법 (DP) 정리 (1) | 2023.09.14 |
java 배열을 List로, List를 배열로 변환 (0) | 2023.09.14 |
java Character 메소드 (0) | 2023.09.14 |
java String 메소드 (0) | 2023.09.14 |
String을 int로, int를 String으로 변환 (0) | 2023.09.14 |
java 배열 메소드 (0) | 2023.09.14 |