Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การรวม Array เป็น Object Array ใน Java ด้วย Stream.concat

ตัวอย่างโค้ด

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[] ต้องส่ง IntFunction generator เข้าไป: .toArray(size -> (T[]) new Object[size]) (ต้อง @SuppressWarnings)
  • วิธีนี้สร้าง array ใหม่ (immutable approach) - array ต้นฉบับไม่เปลี่ยนแปลง

วิธีอื่นๆ

1. ใช้ Arrays.copyOf + System.arraycopy (ประสิทธิภาพดีกว่า)

public static  T[] 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 เป็นกลาง

List list = 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