다음 코드를 사용하여 Integer 객체를 포함하는 ArrayList를 기본 int []로 변환하려고하는데 컴파일 시간 오류가 발생합니다. Java로 변환 할 수 있습니까?
List<Integer> x = new ArrayList<Integer>();
int[] n = (int[])x.toArray(int[x.size()]);
답변
변환 할 수는 있지만 자동으로 수행 할 수있는 것이 없다고 생각합니다.
public static int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
for (int i=0; i < ret.length; i++)
{
ret[i] = integers.get(i).intValue();
}
return ret;
}
(이 중 하나 integers
또는 그 안의 요소가 이면 NullPointerException이 발생합니다 null
.)
편집 : 의견에 따라 LinkedList
다음 과 같은 목록으로 과도한 비용을 피하기 위해 목록 반복자를 사용할 수 있습니다 .
public static int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
Iterator<Integer> iterator = integers.iterator();
for (int i = 0; i < ret.length; i++)
{
ret[i] = iterator.next().intValue();
}
return ret;
}
답변
당신이 사용하는 경우 자바 -8 또 다른 방법이 있습니다.
int[] arr = list.stream().mapToInt(i -> i).toArray();
그것이하는 일은 :
Stream<Integer>
목록에서 가져 오기IntStream
각 요소를 자체에 매핑하여 (identity function)int
각Integer
객체가 보유한 값을 unboxing하여 획득 (Java 5부터 자동으로 수행)int
호출 하여 배열 얻기toArray
intValue
메소드 참조를 통해 명시 적으로 호출 할 수도 있습니다 .
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
목록에 참조 NullPointerException
가 있으면 얻을 수 있다고 언급 할 가치가 있습니다 null
. 다음과 같이 스트림 파이프 라인에 필터링 조건을 추가하면 쉽게 피할 수 있습니다.
//.filter(Objects::nonNull) also works
int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
예:
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int[] arr = list.stream().mapToInt(i -> i).toArray(); //[1, 2, 3, 4]
list.set(1, null); //[1, null, 3, 4]
arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray(); //[1, 3, 4]
답변
구글 구아바
Google Guava 는에 전화하여 깔끔한 방법을 제공합니다 Ints.toArray
.
List<Integer> list = ...;
int[] values = Ints.toArray(list);
답변
Apache Commons에는 ArrayUtils 클래스가 있으며이 메소드에는 toPrimitive () 메소드가 있습니다.
import org.apache.commons.lang.ArrayUtils;
...
List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
int[] intArray = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));
그러나 Jon이 보여 주었 듯이 외부 라이브러리를 사용하는 대신 혼자서이 작업을 수행하는 것이 매우 쉽습니다.
답변
list.get(i)
List 구현에 따라 성능이 떨어질 수 있으므로 List 반복자를 사용하여 반복하는 것이 더 좋습니다 .
private int[] buildIntArray(List<Integer> integers) {
int[] ints = new int[integers.size()];
int i = 0;
for (Integer n : integers) {
ints[i++] = n;
}
return ints;
}
답변
사용 달러하는 것은 매우 간단해야한다 :
List<Integer> list = $(5).toList(); // the list 0, 1, 2, 3, 4
int[] array = $($(list).toArray()).toIntArray();
중간 toArray()
통화 를 제거하기 위해 DSL을 개선 할 계획입니다
답변
이것은 나를 위해 잘 작동합니다 🙂
에서 찾을 수 https://www.techiedelight.com/convert-list-integer-array-int/
import java.util.Arrays;
import java.util.List;
class ListUtil
{
// Program to convert list of integer to array of int in Java
public static void main(String args[])
{
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] primitive = list.stream()
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(primitive));
}
}