본문 바로가기
언어/Java

Arrays.asList()

by 넬준 2022. 5. 30.

 

보통 배열을 List로 변환하고 싶을 때,

Arrays.asList(배열)

 

위 메소드를 사용한다고 알고 있다.

 

이번 과제를 하면서 int형 배열 int[]을 Integer를 요소로 하는 리스트 List<Integer>로 변경하고자 했다.

 

Arrays.asList(int 배열)

 

int[] intArr = {1, 2, 3, 4, 5};

List<int[]> list = Arrays.asList(intArr); //List<Integer>형태가 아니다
int size = list.size(); //size == 1

 

List<Integer> 에 1, 2, 3, 4, 5를 각각 요소로 가지는 사이즈 5의 list를 기대했지만 결과는 int[]인 [1, 2, 3, 4, 5] 요소 하나를 갖는 사이즈 1의 list가 만들어졌다.

 

Arrays.asList()는 primitive type을 Wrapper class로 auto-boxing 해주지 않는다. 

즉, 다시 말해서 primitive type의 배열은 해당 메서드로 원하는 list를 리턴받을 수 없다. 

 

방법 1. 반복문

가장 손쉽게 생각할 수 있는 방법이다. 직접 배열의 요소 하나하나를 list에 넣어주는 것이다.

 

int[] intArr = {1, 2, 3, 4, 5};

List<Integer> list = new ArrayList<>();

for(int num : intArr) {
	list.add(num);
}

 

방법 2. Stream

다른 방법이 있을까 찾아보니 Stream을 이용한 방법이 있었다.

 

int[] intArr = {1, 2, 3, 4, 5};

List<Integer> list = Arrays.stream(arr) //IntStream
                            .boxed() //Stream<Integer> 	
                            .collect(Collectors.toList());

 

배열을 Stream으로 만들고,(Arrays.stream(arr))

Stream의 boxed()를 사용해 primitive type의 Stream을 Wrapper class Stream으로 바꿔준다. (boxed())

마지막으로 Stream을 list로 변환해주면 된다. (collect(Collectors.toList()))

'언어 > Java' 카테고리의 다른 글

String 연산  (0) 2022.07.17
예외 (Exception)  (0) 2022.06.28
배열과 맵 toString()  (0) 2022.05.25
OOP의 특성 - 2. 다형성  (0) 2022.05.13
OOP의 특성 - 1. 상속  (0) 2022.05.12

댓글