Java中怎么循环遍历输出二维List<Object[]>
时间: 2024-05-02 20:19:46 浏览: 128
可以使用两个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]
```
相关问题
for (Entry<String, List<List<Object>>> entry : entries)如何获取下标
在Java中,`for`循环遍历`Map.Entry<String, List<List<Object>>>`结构时,`entry`表示当前键值对。这个键值对实际上是由两部分组成的:一个键`String`和一个值,该值是一个嵌套的列表结构`List<List<Object>>`。
`entry.getKey()`会返回第一个元素,即`String`类型的键,这是下标的标识。而`entry.getValue()`则返回第二个元素,即`List<List<Object>>`,它是一个二维列表,你可以通过索引来访问其中的子列表。
例如,如果你想获取每个二级列表的第一个元素(相当于内部列表的一个下标),可以这样做:
```java
for (Entry<String, List<List<Object>>> entry : entries) {
List<List<Object>> innerLists = entry.getValue();
for (List<Object> innerList : innerLists) {
int innerIndex = 0; // 这里就是一级列表的下标
Object firstItem = innerList.get(0); // 获取二级列表的第一个元素
// ... 对firstItem进行操作
}
}
```
这里的`innerIndex`就是你所问的一级列表(即外层列表)的下标,而`get(0)`则是获取二级列表(内层列表)的第一个元素的索引。
解释一下下面这段代码@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中读取到的数据的二维列表。
该方法通过遍历每个工作表、每行、每个单元格,将读取到的数据存储在一个二维列表中,并最终返回该列表。
阅读全文