간단한 문법의 활용이긴 하지만, 사용할 때마다 헷갈려서 기록해두려고 한다.
1. Integer[] 배열을 List<Integer>로 변환
Integer[] 배열을 만들어서 List<Integer>로 만드는 방법은 매우 간단하다.
// 배열
Integer[] array1 = new Integer[]{1, 2, 3, 4, 5, 6, 7};
// 변환한 리스트
List<Integer> list1 = Arrays.asList(array1);
이는 Integer는 오브젝트이기 때문에 별다른 중간 작업이 필요없이 Arrays.asList()로만으로 변환이 가능하다.
2. int[] 배열을 List<Integer>로 변환
위에 Integer와는 다르게 int는 오브젝트가 아닌 기본형 타입이기 때문에 위와 같이 코드를 작성하면 어떻게 될까?
java: incompatible types: inference variable T has incompatible bounds
equality constraints: java.lang.Integer
lower bounds: int[]
위와 같은 컴파일 에러가 발생한다. List는 제너릭을 사용해서 Integer라는 Wrapper 객체를 받아야 하는데, int[]는 기본형 타입이기 때문이다. 그럼 어떻게 해줘야할까? 자바의 Stream을 사용하면 int[] 배열의 모든 인자를 Wrapper 클래스로 바꿔준 후 List로 변환할 수가 있다. 한번 코드로 작성해보자.
// 배열
int[] array1 = new int[]{1, 2, 3, 4, 5, 6, 7};
// 변환한 리스트
List<Integer> list1 = Arrays.stream(array1).boxed().collect(Collectors.toList());
위 코드를 해석해보면 먼저, array1 배열을 stream으로 만든 후에 boxed() 메소드를 적용하면 int 기본형 타입을 모두 Wrapper 클래스로 변환시켜 줍니다. 그 후 collect()를 사용해서 List로 변환시켜 줍니다.
3. List<Integer> 리스트를 int[] 배열로 변환
위에서 기본형 타입인 int 배열을 Stream을 사용해서 List<Integer>로 변환해봤다. 이제 반대로는 어떻게 변환할 수 있을까? 반대로 변환할 때도 Stream을 써볼 것이다.
// 리스트
List<Integer> list1 = List.of(1, 2, 3, 4, 5, 6, 7);
// 변환한 배열
int[] array1 = exList.stream().mapToInt(Integer::intValue).toArray();
새로운 메소드가 나왔다. mapToInt() 이다. 해당 메소드를 위와 같이 mapToInte(Integer::intValue)로 사용하면 리스트에 있는 Wrapper 타입의 인자들을 하나씩 돌면서 기본형 타입인 int로 변환해줍니다. 그리고 마무리로 toArray() 메소드를 통해서 배열로 변환할 수 있습니다.
생각보다 int[]를 List<Integer>로 변환하는 경우가 좀 있었던 거 같아서 이렇게 기록해두려고 했다. 이제는 안 까먹어야지. 😄
'🧑🏻💻 Dev > Java' 카테고리의 다른 글
[Java] TreeSet에서 커스텀 객체 정렬 (0) | 2023.03.24 |
---|---|
[Java] Java의 문자열 String과 친해져보자 (0) | 2023.03.09 |
[Java] 열거형 (enum) (0) | 2023.02.08 |
[Java] 문자열을 자르는 split()과 StringTokenizer (2) | 2023.02.03 |
[Java] 입력을 받는 BufferedReader와 Scanner (0) | 2023.02.02 |