有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中组合两个对象数组

我有一个从excel文件获取信息的小脚本。在我收集了所需的信息之后,我想将这两个数组合并成一个数组。可能吗

public Object[][] createData1() throws Exception {
    Object[][] retObjArr1 = data.getTableArray("C:\\Users\\OAH\\Workspaces\\Chrome2\\Testdata2.xls", "Sheet1", "normalCustomer");
    Object[][] retObjArr2 = data.getTableArray("C:\\Users\\OAH\\Workspaces\\Chrome2\\Testdata2.xls", "Sheet2", "langLogin");
    return(retObjArrCombined); //I want to return one array with both arrays
}

共 (6) 个答案

  1. # 1 楼答案

    以下代码实现了您的任务:

    Object[][] retObjArr1 = { { "a00", "a01" }, { "a10", "a11" },
            { "a20", "a21" } };
    Object[][] retObjArr2 = { { "b00", "b01" }, { "b10", "b11" },
            { "b20", "b21" } };
    
    List<Object[][]> list = new ArrayList<Object[][]>();
    list.add(retObjArr1);
    list.add(retObjArr2);
    
    int totalRow = 0;
    for (int all = 0; all < list.size(); all++) {
        totalRow += list.get(all).length;
    }
    Object[][] retObjArrCombined = new Object[totalRow][];
    int rowCount = 0;
    for (int all = 0; all < list.size(); all++) {
        Object[][] objects = list.get(all);
        for (int i = 0; i < objects.length; i++) {
            retObjArrCombined[rowCount] = objects[i];
            rowCount++;
        }
    }
    for (int i = 0; i < retObjArrCombined.length; i++) {
        for (int j = 0; j < retObjArrCombined[i].length; j++) {
            System.out.println("value at :(" + i + "," + j + ") is:"
                    + retObjArrCombined[i][j]);
        }
    }
    

    在这段代码中,Object[][] retObjArrCombined包含从retObjArr1retObjArr2等复制的所有数组。。。并打印以下输出:

    value at :(0,0) is:a00
    value at :(0,1) is:a01
    value at :(1,0) is:a10
    value at :(1,1) is:a11
    value at :(2,0) is:a20
    value at :(2,1) is:a21
    value at :(3,0) is:b00
    value at :(3,1) is:b01
    value at :(4,0) is:b10
    value at :(4,1) is:b11
    value at :(5,0) is:b20
    value at :(5,1) is:b21
    
  2. # 2 楼答案

    一个带有无计算上拉的流的班轮
    是的,它会慢几毫秒

    Object[][] combi = Stream.concat( Arrays.stream( retObjArr1 ), Arrays.stream( retObjArr2 ) ).toArray( Object[][]::new );

  3. # 3 楼答案

    以下是简单的解决方案:

    private static Object[] concatenate(Object[] a, Object[] b) {
        Collection<Object> result = new ArrayList<Object>(a.length + b.length);
        for (Object val : a) {
            result.add(val);
        }
        for (Object val : b) {
            result.add(val);            
        }
        return result.toArray();
    } 
    
  4. # 4 楼答案

    这个怎么样

    Link to Another Stack Question!!!!!!

        public static int[][] append(int[][] a, int[][] b) {
        int[][] result = new int[a.length + b.length][];
        System.arraycopy(a, 0, result, 0, a.length);
        System.arraycopy(b, 0, result, a.length, b.length);
        return result;
    }
    
  5. # 5 楼答案

    可以使用System.arraycopy方法(是的,全部小写)Javadoc。可以使用java.util.Arrays类对数组进行更多操作

  6. # 6 楼答案

    另一种方式:

    Object[][] one = {{1, 2, 3}, {4, 5}, {6}};
    Object[][] two = {{7, 8}, {9}};
    List<Object[]> holder = new ArrayList<>();
    
    Collections.addAll(holder, one);
    Collections.addAll(holder, two);
    
    Object[][] result = holder.toArray(new Object[holder.size()][]);