【问题标题】:How to combine two object arrays in Java如何在Java中组合两个对象数组
【发布时间】:2020-04-11 16:42:35
【问题描述】:

我有一个从 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
}

【问题讨论】:

  • 数组联合中是否允许重复元素?
  • 除非在你之前没有人考虑过合并两个数组,否则我很确定在谷歌上搜索 java merge arrays 会给你想要的答案。

标签: java arrays testng


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这个怎么样?

    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;
    }
    

    【讨论】:

      【解决方案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】:

        另一种方式:

        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()][]);
        

        【讨论】:

          【解决方案5】:

          以下代码可以完成您的任务:

          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
          

          【讨论】:

            【解决方案6】:

            单线与没有计算上拉的流
            是的,它会慢几毫秒

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-17
              • 2022-01-04
              • 2012-08-06
              相关资源
              最近更新 更多