Nếu bạn đang sử dụng java-8 cũng có một cách khác để làm điều này.
int[] arr = list.stream().mapToInt(i -> i).toArray();
Những gì nó làm là:
- nhận được
Stream<Integer>
từ danh sách
- có được một
IntStream
bằng cách ánh xạ từng phần tử vào chính nó (hàm nhận dạng), bỏ hộp int
giữ giá trị của từng Integer
đối tượng (được thực hiện tự động kể từ Java 5)
- nhận được mảng
int
bằng cách gọitoArray
Bạn cũng có thể gọi một cách rõ ràng intValue
thông qua một tham chiếu phương thức, nghĩa là:
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
Điều đáng nói là bạn có thể nhận được NullPointerException
nếu bạn có bất kỳ null
tài liệu tham khảo nào trong danh sách. Điều này có thể dễ dàng tránh được bằng cách thêm một điều kiện lọc vào đường ống dẫn như thế này:
//.filter(Objects::nonNull) also works
int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
Thí dụ:
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]