我正在以
的类型从数据库接收我的数据 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>
是柱
答案 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