[TIL] Integer ArrayList -> int 배열 변환

for문을 통해서 변환하는것에만 익숙해서 스트림으로 변환하는 방법을 찾아봤다.

public static void main(String args[]) {

    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();
}

방법 1 (평소에 많이 쓰는 방법..)

방법 2, 3

리스트를 스트림으로 변환 후,

map을 통해서 intStream을 가져온다.

그 후에 toArray()를 통해 배열로 만든다.

방법 2와 방법 3의 차이는 map 연산 시 int형으로 변경하는 방법의 차이이다.

방법 2는 자바가 자동으로 Integer 요소를 int형으로 언박싱해준다.

방법 3은 intValue 메서드를 통해 각 요소를 int형으로 변경해준다.

Integer::intValue

왼쪽(객체)에서 오른쪽(메서드)를 사용할거야!! 메소드 참조


// 추가로, 
// filter를 사용해서 리스트의 null을 제외시키는 방법. 

int[] arr4 = list.stream()
.filter(i -> i != null)
.mapToInt(i -> i)
.toArray();