Mục lục
Việc sử dụng các collection như ArrayList được xây dựng sẵn mang đến rất nhiều lợi ích với kích thước tự tăng giảm đi cùng rất nhiều method hỗ trợ sẵn như insert, delete, update, removeAll mà nếu sử dụng array thì chúng ta sẽ phải code rất nhiều. Thế nhưng đôi lúc chúng ta cần chuyển đổi qua lại giữa 2 kiểu dữ liệu này để phù hợp với các trường hợp cụ thể.
Ví dụ như bạn nhận vào một array mà phải xử lý rất nhiều trên tập dữ liệu của nó như vậy rất cần thiết chuyển Array sang ArrayList để thao tác sẽ dễ dàng hơn rất nhiều.
Convert array sang arraylist
Để convert một array sang arraylist chúng ta có một số cách như:
Arrays.asList()
Chúng ta có thể sử dụng Arrays.asList() với tham số là array để chuyển nó thành arraylist
import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { String[] strings = new String[] {"a", "b", "c", "d"}; ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(strings)); System.out.println(arrayList); } }
Output: [a, b, c, d]
Collections.addAll()
import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { Integer[] arr = {1, 2, 3, 4, 5, 6, 7}; ArrayList<Integer> arrayList = new ArrayList<>(); Collections.addAll(arrayList, arr); System.out.println(arrayList); } }
Output: [1, 2, 3, 4, 5, 6, 7]
Code chay
Chúng ta có thể loop qua array và lần lượt thêm các phần tử vào ArrayList. Cách này hơi chuối, vì thật ra các cách trên nó cũng làm vậy thôi, mình chỉ sử dụng lại thôi cho khoẻ =)
import java.util.ArrayList; public class Main { public static void main(String[] args) { Integer[] arr = {1, 2, 3, 4, 5, 6, 7}; ArrayList<Integer> arrayList = new ArrayList<>(); for(Integer i : arr) { arrayList.add(i); } System.out.println(arrayList); } }
Output: [1, 2, 3, 4, 5, 6, 7]
Convert từ ArrayList sang Array
Để chuyển ArrayList về Array chúng ta vẫn sẽ có nhiều cách khác nhau mà trong phần này mình sẽ liệt kê ra để các bạn có thể tham khảo và chọn phương pháp phù hợp cho mình.
Lambda Expression
Lambda expression được giới thiệu trong Java 8 và được sử dụng rộng rãi trong mã nguồn Java hiện tại. Trong phần này mình sẽ sử dụng Stream API kết hợp với lambda để chuyển đổi Arraylist sang Array.
package com.company; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(1); arrayList.add(2); arrayList.add(3); Integer[] results = usingLambda(arrayList); for (Integer i : results) { System.out.printf(i + " "); } } public static Integer[] usingLambda(ArrayList<Integer> strings) { return strings.stream().toArray(size -> new Integer[size]); } }
Output: 1 2 3
Method reference
Một cách khác để kết hợp với Stream API để sử dụng toArray() method là sử dụng method reference giúp code trông ngắn gọn hơn
package com.company; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(1); arrayList.add(2); arrayList.add(3); Integer[] results = usingMethodReference(arrayList); for (Integer i : results) { System.out.printf(i + " "); } } public static Integer[] usingMethodReference(ArrayList<Integer> strings) { return strings.stream().toArray(Integer[]::new); } }
Output: 1 2 3
Convert ArrayList sang Primitive Array
Nảy giờ nếu các bạn để ý thì mình chuyển ArrayList sang Array dưới dạng các kiểu dữ liệu wrapper như Interger, long v.v chứ chưa thao tác trên các kiểu dữ liệu nguyên thủy như int, long, double, v.v
Trong phần này mình sẽ sử dụng Strean#mapToInt để chuyển đổi ArrayList sang Array. Các bạn sẽ cần khi làm việc với các thư viện xây dựng sẵn của Java hay các bên thứ ba thì họ thường dùng Array cho các kiểu dữ liệu nguyên thủy.
package com.company; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(1); arrayList.add(2); arrayList.add(3); int[] results = intStreamToPrimitiveIntArray(arrayList); for (Integer i : results) { System.out.printf(i + " "); } } public static int[] intStreamToPrimitiveIntArray(ArrayList<Integer> integers) { return integers.stream().mapToInt(i -> i).toArray(); } }