반응형
Integer ArrayList을 int 배열로 변환하는 방법에 대해 알아보자.
사실 자꾸 까먹어서 기록해둔다.
String 타입의 List를 배열로 변환할 때 toArray()를 사용하면 된다.
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
// 1. toArray() - 배열 선언과 동시에 할당
String[] arr = list.toArray(new String[0]); // ["a", "b", "c"]
// 2. toArray() - 배열 선언 후 값 할당
String[] arr2 = new String[list.size()];
list.toArray(arr2); // ["a", "b", "c"]
하지만 int형과 같은 primitive 타입은 toArray()를 사용할 수 없다.
이 때는 아래의 방법을 사용해보자.
public static void main(String args[]) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// 방법 1 : 반복문 사용
int[] arr1 = new int[list.size()]
for (int i = 0; i < list.size(); i++)
arr1[i] = list.get(i).intValue();
// 방법 2 : stream 사용 (1)
int[] arr2 = list.stream()
.mapToInt(i -> i)
.toArray();
// 방법 3 : stream 사용 (2)
int[] arr3 = list.stream()
.mapToInt(Integer::intValue)
.toArray();
// 방법 4 : stream 사용 with filter
int[] arr4 = list.stream()
.filter(i -> i != null)
.mapToInt(i -> i)
.toArray();
}
방법 1은 반복문을 사용한 가장 기본적인 방법으로 각 요소에 접근한 뒤 intValue 메서드를 사용해 int형으로 만든 후 배열에 넣는 방법이다.
방법 2와 3은 list를 stream으로 변환한 후, map을 이용해서 intStream을 가져오고, 그 후에 toArray()를 통해 배열로 만드는 방법이다.
차이점이 있다면 map 연산 시 int형으로 변경하는 방법에 차이가 있다.
방법 2는 Java가 자동으로 각 요소의 Integer 요소를 int형으로 unboxing 해주는 반면, 방법 3은 intValue 메서드를 통해 각 요소를 직접 int형으로 변경해준다.
방법 4는 방법 2에 filter를 추가해 list의 null을 필터링하는 방법이다.
반응형
'Java' 카테고리의 다른 글
[Error/Exception] java.lang.IllegalStateException: Duplicate key ‘key로 저장하려는 값’ (attempted merging values ~~) 해결 방법 (0) | 2024.07.24 |
---|---|
[Java/MySQL] Timestamp, LocalDateTime 시간 데이터의 반올림 이슈(feat. Fractional Seconds, LocalTime.MAX) (1) | 2023.11.30 |
[Java/DB] ORM이란? MyBatis와 JPA 비교 및 예제 (0) | 2023.08.25 |
[Java] JVM(Java Virtual Machine)이란? (0) | 2023.08.22 |
[Java] 코드 특정 구간의 실행 시간 구하기 (0) | 2023.06.14 |