간결한 방식으로 리스트와 배열간 형변환을 알아 보도록 하자
먼저,
1. 리스트 -> 배열
toArray() 를 사용
List 클래스의 인스턴스 메서드인 toArray()는 Object타입의 배열로 반환
타입 변환이 자동으로 이루어지지 않아서 리턴 배열을 활용하기 번거롭다.
List<Integer> list = new ArrayList();
Object[] arr = list.toArray();
toArray(T[] a)
toArray([T[] a)는 T 타입 매열을 반환한다.
T는 값 타입이 될 수 없기 때문에 int, double, float와 같은 타입의 배열은 이 방법으로는 업을 수 없다.
파라미터 a 의 길이는 0으로 지정하면 알아서 list의 길이에 맞게 조정되어 arr에 저장된다.
List<Integer> list = new ArrayList<>();
Integer[] arr = list.toArray(new Integer[0]);
stream
값타입 매열을 얻기 위해서 int값을 꺼내서 배열로 저장해야한다. 이 때 stream을 사용한다.
list.stream - Stream<Integer>로 반환한다.
mapToInt(Integer::intVlaue) - Integer의 intValue() 메소를 참조하여 값타입을 int롤 언박싱한다.
toArray() - IntStream의 원소를 배열로 변환한다
List<Integer> list = new ArrayList<>();
int[] arr = list.stream()
.mapToInt(Integer::intValue)
.toArray();
2. 배열 -> 리스트
Arrays.asList(T[] a)
T가 값 타입이 아닌 경우 위와 같이 간편하게 변환할 수 있다.
String[] arr = {“1”, “2”, “3”, “4”};
List<String> list = Arrays.asList(arr);
stream
mapToInt() 과정을 통해 Integer를 int로 언박싱해준것처럼, 여기서는 반대로 boxed()를 통해 int를 Integer로 박싱해줘야 한다.
IntStream 로 원소들을 넘겨받았으니 collect()를 호출해서 리스트 로 변환나다.
int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream()
.boxed()
.collect(Collectors.toList());
참고
https://velog.io/@jwkim/java-arraylist-array-type-conversion
'코테 > 개념 정리' 카테고리의 다른 글
java.uti.StringTokenizer 클래스 란? (0) | 2023.12.23 |
---|---|
[ Heap ] 힙이란? 우선순위 큐란? (0) | 2023.12.23 |
자료구조 - 스택(Stack) / 큐(Queue)에 관하여... (0) | 2023.12.09 |
자료구조 - 해시(Hash)에 관하여... (0) | 2023.12.09 |
제곱근과 합성수 간의 관계 (1) | 2023.12.01 |