ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Integer타입의 list를 array로 바꾸기
    개발/Java 2021. 1. 10. 15:08

    다음은 ArrayList에 값을 넣고 이것을 배열로 바꿔서 리턴하는 예제다.

    public int[] solution(int[] numbers) {
            List<Integer> answer = new ArrayList<>();
    
            for (int i = 0; i < numbers.length; i++) {
                answer.add(numbers[i]);
            }
    
            // return (int[]) answer.toArray(); // 컴파일 에러
            // return (Integer[]) answer.toArray(); // 컴파일 에러
    
            return answer.stream()
                    .mapToInt(x -> x)
                    .toArray();
        }

    여러 방법을 시도해봤다.

    1. (int[]) answer.toArray();
      Object타입이 int값을 갖는게 확실하다면 다음 코드처럼 object -> int 변환이 가능하다.

      Object o = (Object) 1;
      int a = (int) o

      그러나, object 배열 -> int 배열은 컴파일 에러가 발생한다.

    2. (Integer[]) answer.toArray();
      컴파일러가 런타임에 Integer를 int로 unbox 하니까, 배열도 가능할까 싶어서 시도해봤다.
      1번에서 문제였던 Object[]에서 Integer[]로 캐스팅은 가능했지만, return하는 과정에서 타입 에러가 발생했다.

    Integer -> int처럼 간단하게 생각했지만, 배열이 됬을 땐 다른 문제인듯 했다.

     

    해결 - mapToInt()

    자바8 이상이라는 가정하에

    return answer.stream()
                    .mapToInt(x -> x)
                    .toArray();

    이렇게 해결했다.

     

    stream을 생성하고 mapToInt()를 이용해 Integer 타입 원소들을 int로 바꿔주고 .toArray()로 배열을 만들었다.

    자바8을 열심히 공부하자. 정말 편하다!

    댓글

Designed by Tistory.