[Java] Integer[] -> int[] 로 변환하기
1. 개요
변환에는 크게 두 가지 종류가 있습니다.
- 자료구조의 변환. 예를 들어, List<Integer>를 Integer[]로의 변환. (타입은 유지되고 자료구조만 변환하고 싶은 경우)
- 자료형의 변환. 예를 들어, int 타입을 Integer 타입으로 변환하고 싶은 경우
해당 포스팅은 자료형을 변환시키고자 하는 것으로 위에서 두 번째 경우에 해당합니다.
그럼 어떤 경우에 자료형을 변환해야할까요? 🤔
int[] 배열을 오름차순 정렬하고싶다면 Arrays.sort()로 간단히 해결할 수 있습니다.
하지만, 내림차순 정렬을 하고싶다면 두 번째 파라미터로 Comparator<T>를 정의해줘야하는데, 이때 value타입은 불가능합니다.
2. Integer[] ---> int[] 로의 변환
Java8의 람다와 스트림을 활용하는 방법으로, 람다 대신 메서드 참조를 사용해도 상관없습니다.
public class Main { public static void main(String[] args) { Integer[] a = {1, 2, 3, 4}; // 1. mapToInt에 메서드 참조를 이용하는 방법 int[] b = Arrays.stream(a).mapToInt(Integer::intValue).toArray(); // 2. mapToInt에 람다식을 이용하는 방법 int[] c = Arrays.stream(a).mapToInt(i -> i).toArray(); } }
3. int[] ---> Integer[] 로의 변환
public class Main { public static void main(String[] args) { int[] a = {1, 2, 3, 4}; Integer[] b = Arrays.stream(a).boxed().toArray(Integer::new); } }
4. 어떤 경우에 value 타입을 reference 타입으로 변환해야할까 ?
저는 위와 같은 변환의 필요성을 int[] 배열을 내림차순 정렬하려할 때 느꼈습니다. 🧐
int[] 배열을 오름차순 정렬하려면 Array.sort(arr) 와 같은 방식으로 손쉽게 해결이 가능합니다.
하지만, 내림차순으로 정렬 조건을 변경하기 위해선 Comparator<T>를 정의해야하는데 이때 value 타입으로는 불가능합니다.
public class Main { public static void main(String[] args) { int[] arr = {3, 7, 4, 9}; // 오름차순 정렬은 Arrays 유틸리티 객체를 사용할 수 있다. Arrays.sort(arr); // 내림차순 정렬은 불가능하다. // Arrays.sort(arr, Collections.reverOrder()); // Arrays.sort(arr, (a, b) -> b - a); } }
변환이 불가능한 이유는 제네릭 때문인데요, <> 안에 value 타입을 넣을 수 없기 때문입니다.
따라서, 위와 같이 int[] 배열을 내림차순으로 정렬하고자할 때는 reference 타입으로 변환을 먼저 한 후 정렬합니다.
'Programming > Java' 카테고리의 다른 글
[Java] 정규 표현식 (regexp) (0) | 2020.09.12 |
---|---|
[Java] Map을 순회하는 방법 (0) | 2020.07.03 |
[Java] 테스트를 위한 환경 구성 (0) | 2020.05.28 |
[Java] XML 파싱 (0) | 2020.05.13 |
[Java] JVM (Java Virture Machine) (0) | 2020.04.19 |
댓글
이 글 공유하기
다른 글
-
[Java] 정규 표현식 (regexp)
[Java] 정규 표현식 (regexp)
2020.09.12 -
[Java] Map을 순회하는 방법
[Java] Map을 순회하는 방법
2020.07.03Map을 순회하는 방법을 정리해보겠습니다. 첫 번째, Iterator를 통해 접근하기 Map map = new HashMap(); Iterator keys = map.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); map.get(key); } 두 번째, entrySet으로 접근하기. Map은 하나의 원소로 Key-Value 묶음을 가지기 때문에 원소란 표현 대신 Entry라고 표현합니다. Map map = new HashMap(); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); } 세 번째… -
[Java] 테스트를 위한 환경 구성
[Java] 테스트를 위한 환경 구성
2020.05.28웹 애플리케이션을 유지보수하거나 추가 개발하는 과정에서 특정 라이브러리의 기능을 테스트해보고 싶은 경우가 많이 있다. 나 같은 경우 간단하게 StringUtils의 메서드 결과 값이 어떻게 나오는지 테스트해보고 싶었는데, 이런 간단한 작업을 하기 위해 메인 소스 영역에 아래와 같은 코드를 넣은 후, 웹 애플리케이션을 구동하는걸 반복하다보니 이건 아니다 싶었다… int idx = StringUtils.indexOf("abcdefg_1234", '_'); log.info("result : ", idx); 반면에 src/test/java 영역에 해당 코드를 작성하면 결과 값을 가볍게 바로 확인할 수 있다. public class StringUtilsTest { @Test public void test() {… -
[Java] XML 파싱
[Java] XML 파싱
2020.05.13
댓글을 사용할 수 없습니다.