将arrayList转换为object [] []的最简单方法

时间:2017-03-20 19:36:42

标签: java arraylist

我正在以

的类型从数据库接收我的数据

Map<String,ArrayList<String>

所以,列&#39;名称是键,列值存储在

ArrayList<String>

我需要将这些哈希转换为Object [][] data;以呈现数据。

我知道,循环之类的简单解决方案是如何工作的。 但我想知道转换的最短解决方案是什么

ArrayList<String>Object[][] data

我正在使用 java 8。

让我们说,一开始我有

Map<String, ArrayList<String>> res

点:

我有ArrayList<String>中的数据意味着,我可以垂直访问数据,但我在Object [][]中以某种方式水平访问。

正如我所说res是数据库,所以Object [][]将是,同时ArrayList<String>是柱

2 个答案:

答案 0 :(得分:2)

这个怎么样?

Object[][] result = res.entrySet()
                       .stream()
                       .map(e -> e.getValue().toArray())
                       .collect(Collectors.toList())
                       .toArray(new Object[0][0]);

生成的数组具有维度:result[col][row]。所以在迭代时:

for(int col = 0; col < result.length; col++) {
  for(int row = 0; y < result[col].length; row++){
     result[col][row]; //table cell 
  }
}

答案 1 :(得分:0)

Java 8为将其转换为数据对象提供了一种有效的解决方案,正如@Gerald在上面的答案中所述。
但是,如果您也有兴趣以天真的方式做到这一点,那么我已经实现了如下代码。

    Map<String, ArrayList<String>> map = new HashMap<>();
    String[] arr1 = { "I", "am", "good" };
    List<String> list = Arrays.asList(arr1);
    map.put("Max", new ArrayList<String>(list));

    arr1 = new String[]{"I", "am", "always", "excited"};
    list = Arrays.asList(arr1);
    map.put("Peter", new ArrayList<String>(list));

    System.out.println(map);
    // OUTPUT: {Max=[I, am, good], Peter=[I, am, always, excited]}

    Object[][] data = new Object[map.size()][];
    int i = 0;

    // iterate the map and store to Object data
    for(Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {
        data[i] = new Object[entry.getValue().size() + 1]; // number of records from list + (One) map key

        data[i][0] = entry.getKey(); // save key at '0'th index
        int j = 1;                   // iterate the ArrayList to save values in the same row. 
        for(String s : entry.getValue()) {
            data[i][j++] = s;
        }
        i++;
    }

    // Printing the data object
    for(i = 0; i < data.length; i++) {
        for(int j = 0; j < data[i].length; j++) {
            System.out.print(data[i][j] + " ");
        }
        System.out.println();
    }

    // OUTPUT :
    //Max I am good 
    //Peter I am always excited