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
IntStreambằng cách ánh xạ từng phần tử vào chính nó (hàm nhận dạng), bỏ hộp intgiữ 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
intbằng cách gọitoArray
Bạn cũng có thể gọi một cách rõ ràng intValuethô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 NullPointerExceptionnếu bạn có bất kỳ nulltà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]