ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Array를 List로, List를 Array로 변경하는 방법
    자바 2022. 12. 30. 14:57

    [1] 배열(Array) -> 리스트(List)

    (1) 객체 타입 배열 -> 리스트 (Arrays.asList(), List.of())

    객체 타입 배열은 Arrays.asList() 와 List.of() 통해 리스트로 변환 가능하다. (List.of()는 java 9부터 지원)

    Integer[] arr1 **= {1, 2, 3};
    
    List<Integer> list1 = Arrays.asList(arr1);
    List<Integer> list2 = List.of(arr1);
    // list1.add(4) // Unsupported OperationException 예외 발생

    이때 반환된 리스트는 고정 사이즈 리스트로 추가, 삭제 불가능하다. 그 이유는 java.util.ArrayList 와 다른 List 구현 클래스를 반환하기 때문이다. 

    Arrays.asList() → java.util.Arrays.ArrayList

    List.of() ->java.util.ImmutableCollections.ListN

    만약에 리스트를 변경 가능하게 만들고싶다면 ArrayList 생성자를 한 번 더 감싸주어야 한다.
    (Collection 인터페이스를 구현하고 있기 때문에 가능)

    List<Integer> notFixedList = new ArrayList<Integer>(Arrays.asList(arr1));;
    

     

    (2) 기본 타입 배열 -> 리스트

    리스트는 기본 타입(Primitive type)을 지원하지 않기 때문에 boxed()를 이용해 래퍼 타입(Wrapper type) 으로 박싱한 후에 리스트로 변환해야 한다.

    int[] arr = {1, 2, 3};
    List<Integer> list = Arrays.stream(arr)
                            .boxed() // 기본 타입 -> 래퍼 타입
                            .collect(Collectors.toList());

     


    리스트(List) → 배열(Array)

    (1) 리스트를 배열로 변환하기 (toArray())

    toArray()를 사용하면 리스트를 배열로 변환이 가능하며, 메서드의 인자로 변경할 배열의 생성자를 넣어줄 수 있다.

    List<Integer> list = IntStream.range(1, 6)
                                .boxed()
                                .collect(Collectors.toList());
    
    Integer[] arr = list.toArray(Integer[]::new);

    (2) 리스트를 기본 타입(Primitive type) 배열로 변환

    리스트를 기본 타입 배열로 변환하기 위해 toArray()를 사용하기 위해서는 기본 타입으로 변환 후에 toArray()를 사용해야 한다. Stream.map()은 객체를 다른 객체 타입 변환이 가능하지만 기본형을 지원하진 않고, 기본형에 맞는 별도의 메서드를 제공한다.

     

    메서드 명은 아래와 같이 mapTo 에 래퍼 타입명을 붙이면 된다.

    mapToInt() , mapToDouble(), mapToLong().. 

    위 메서드들은 기본형 특화스트림(IntStream, DoubleStream..)을 반환한다.

     

    int[] arr2 = list.stream().mapToInt(Integer::intValue).toArray();
Designed by Tistory.