Java中怎么循环遍历输出二维List<Object[]>
时间: 2024-05-02 09:19:46 浏览: 14
可以使用两个for循环,先遍历外层List,再遍历内层Object[]数组,代码示例:
```
List<List<Object[]>> list = new ArrayList<>();
// 添加一些数据用于测试
list.add(Arrays.asList(new Object[]{"a", 1}, new Object[]{"b", 2}));
list.add(Arrays.asList(new Object[]{"c", 3}, new Object[]{"d", 4}));
for (List<Object[]> innerList : list) {
for (Object[] obj : innerList) {
System.out.print(Arrays.toString(obj) + " ");
}
System.out.println();
}
```
输出结果:
```
[a, 1] [b, 2]
[c, 3] [d, 4]
```
相关问题
解释一下下面这段代码@Override public List<List<Object>> getBankListExcel(InputStream in, String fileName) throws Exception { List<List<Object>> list = new ArrayList<>(); Workbook work = this.getWorkbook(in, fileName); if (null == work) { throw new Exception("创建Excel工作簿为空"); } Sheet sheet = null; Row row = null; Cell cell = null; for( int i = 0;i<work.getNumberOfSheets();i++) { sheet = (Sheet) work.getSheetAt(i); //sheet.getSheetName(); if (sheet == null) { continue; } for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if (row == null) { continue; } List<Object> li = new ArrayList<>(); for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) { cell = row.getCell(y); li.add(cell); } list.add(li); } } return list; }
这段代码是一个方法,用于从Excel文件中读取数据并返回一个包含数据的二维列表。下面是对代码的逐行解释:
1. `@Override`:这是一个注解,表示该方法是对父类或接口中同名方法的重写。
2. `public List<List<Object>> getBankListExcel(InputStream in, String fileName) throws Exception`:这是方法的定义,参数包括一个输入流和文件名,返回一个二维列表。
3. `List<List<Object>> list = new ArrayList<>();`:创建一个空的二维列表,用于存储读取到的数据。
4. `Workbook work = this.getWorkbook(in, fileName);`:调用一个名为`getWorkbook`的方法,传入输入流和文件名,返回一个`Workbook`对象,表示Excel工作簿。
5. `if (null == work) { throw new Exception("创建Excel工作簿为空"); }`:如果`work`为空,则抛出异常,表示无法创建Excel工作簿。
6. `Sheet sheet = null; Row row = null; Cell cell = null;`:创建变量`sheet`、`row`和`cell`,用于引用工作表、行和单元格对象。
7. `for( int i = 0;i<work.getNumberOfSheets();i++) {`:遍历工作簿中的所有工作表。
8. `sheet = (Sheet) work.getSheetAt(i);`:获取第`i`个工作表。
9. `if (sheet == null) { continue; }`:如果工作表为空,跳过当前循环,继续下一次循环。
10. `for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {`:遍历工作表中的所有行。
11. `row = sheet.getRow(j);`:获取第`j`行。
12. `if (row == null) { continue; }`:如果行为空,跳过当前循环,继续下一次循环。
13. `List<Object> li = new ArrayList<>();`:创建一个空的列表,用于存储当前行的数据。
14. `for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {`:遍历行中的所有单元格。
15. `cell = row.getCell(y);`:获取第`y`个单元格。
16. `li.add(cell);`:将单元格的值添加到当前行的列表中。
17. `list.add(li);`:将当前行的列表添加到最终的二维列表中。
18. `return list;`:返回包含从Excel中读取到的数据的二维列表。
该方法通过遍历每个工作表、每行、每个单元格,将读取到的数据存储在一个二维列表中,并最终返回该列表。
Java List<Map<String, Object>> 转成 double[][] doubles
要将Java List<Map<String, Object>>转换为double[][],需要遍历List,然后遍历Map中的键值对,将值转换为double类型,最后将其存储到二维数组中。
以下是一个示例代码:
```java
List<Map<String, Object>> list = new ArrayList<>();
// 假设list中有n个Map对象,每个Map对象包含m个键值对
double[][] doubles = new double[n][m];
for (int i = 0; i < n; i++) {
Map<String, Object> map = list.get(i);
int j = 0;
for (Map.Entry<String, Object> entry : map.entrySet()) {
Object value = entry.getValue();
if (value instanceof Number) {
doubles[i][j] = ((Number) value).doubleValue();
} else {
// 如果值不是Number类型,可以根据实际情况进行处理,比如抛出异常或给一个默认值
throw new IllegalArgumentException("Value must be a number.");
}
j++;
}
}
```
上述代码中,首先定义一个二维数组doubles,大小为n*m,即有n行m列。然后遍历List中的每个Map对象,再遍历Map中的键值对,将值转换为double类型,并存储到doubles中。如果值不是Number类型,抛出异常或者给一个默认值。
需要注意的是,上述代码中只考虑了值为Number类型的情况,如果值为其他类型,需要根据实际情况进行处理。另外,还需要确保List中的每个Map对象的键值对数目相同,否则可能会导致转换失败。