보통 배열을 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 |
댓글