Jeśli używasz java-8 jest też inny sposób, aby to zrobić.
int[] arr = list.stream().mapToInt(i -> i).toArray();
Co to robi:
- uzyskiwanie
Stream<Integer>
z listy
- uzyskiwanie
IntStream
poprzez mapowanie każdego elementu do siebie (funkcja tożsamości), rozpakowywanie int
wartości przechowywanej przez każdy elementInteger
obiekt (wykonywane automatycznie od Java 5)
- uzyskanie tablicy
int
przez wywołanietoArray
Można również jawnie wywołać intValue
za pomocą odwołania do metody, tj .:
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
Warto również wspomnieć, że możesz dostać, NullPointerException
jeśli masz jakieś null
odniesienia na liście. Można tego łatwo uniknąć, dodając warunek filtrowania do potoku strumienia w następujący sposób:
//.filter(Objects::nonNull) also works
int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
Przykład:
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]