알고리즘 문제를 풀다 List
를 Array
로 바꿔 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();