ตัวอย่างโค้ด
import java.util.stream.Stream;
import java.util.Arrays;
public class Demo {
public static Object[] concatFun(T[] obj1, T[] obj2) {
return Stream.concat(Arrays.stream(obj1), Arrays.stream(obj2))
.toArray();
}
public static void main(String[] args) {
Integer[] obj1 = {67, 83, 90};
Integer[] obj2 = {11, 0, 56};
Object[] obj3 = concatFun(obj1, obj2);
System.out.println("อาร์เรย์ที่รวมแล้ว: " + Arrays.toString(obj3));
}
}
ผลลัพธ์
อาร์เรย์ที่รวมแล้ว: [67, 83, 90, 11, 0, 56]
คำอธิบาย
เมธอด concatFun รับ array สองอาร์เรย์ชนิดเดียวกัน (generic T[]) แปลงเป็น Stream แล้วใช้ Stream.concat รวมกัน และ toArray() สร้าง Object[] ใหม่
จุดสำคัญ
- ผลลัพธ์เป็น
Object[]ไม่ใช่T[]เพราะStream.toArray()ไม่มีข้อมูล generic type ระหว่างรันไทม์ (type erasure) - หากต้องการ
T[]ต้องส่งIntFunctiongenerator เข้าไป:.toArray(size -> (T[]) new Object[size])(ต้อง @SuppressWarnings) - วิธีนี้สร้าง array ใหม่ (immutable approach) - array ต้นฉบับไม่เปลี่ยนแปลง
วิธีอื่นๆ
1. ใช้ Arrays.copyOf + System.arraycopy (ประสิทธิภาพดีกว่า)
public staticT[] concatArrays(T[] a, T[] b) { T[] result = Arrays.copyOf(a, a.length + b.length); System.arraycopy(b, 0, result, a.length, b.length); return result; }
2. ใช้ Apache Commons Lang
Object[] result = ArrayUtils.addAll(obj1, obj2);
3. ใช้ List เป็นกลาง
Listlist = new ArrayList<>(Arrays.asList(obj1)); list.addAll(Arrays.asList(obj2)); T[] result = list.toArray(new T[0]);
การเลือกใช้
- Stream.concat - โค้ดสั้น อ่านง่าย ใช้งานทั่วไปได้ดี
- System.arraycopy - เร็วที่สุด เหมาะสำหรับ performance-critical code
- List - ยืดหยุ่นกว่า หากต้องการเพิ่ม/ลบก่อนแปลงกลับ array