나누어 떨어지는 숫자 배열 문제를 통해 공부함
➕ toArray()
String 타입의 List를 배열로 변환하기 위해서 사용
String 타입은 항상 toArray()를 이용해서 배열로 변환했는데 위의 문제를 풀 때 Integer타입의 list를 배열로 변환하려 했더니 오류가 발생했다❗️
그래서 검색해본 결과 int형과 같은 primitive타입은 toArray()를 사용할 수 없다고 한다.
그렇다면 어떤 방법으로 변환이 가능할까❓
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Integer형의 list가 위와 같이 구성되어있다고 가정하고 알아보자
int[] arr1 = new int[list.size()]
for (int i = 0 ; i < list.size() ; i++ ) {
arr1[i] = list.get(i).intValue();
}
int[] arr2 = list.stream()
.mapToInt(i -> i)
.toArray();
int[] arr3 = list.stream()
.mapToInt(Integer :: intValue)
.toArray()
방법2와 매우 유사하지만 방법2는 자바가 자동으로 각 요소의 Integer요소를 int형으로 변환해준다.
이와 달리 방법3에서는 intValue를 통해서 int형으로 변환해준다.
int[] arr4 = list.stream()
.filter(i -> i != null)
.mapToInt(i -> i)
.toArray();
필터를 이용해서 null인 요소를 걸러내는 방법이다.
📑 References