【问题标题】:Iterating an array of objects using streams使用流迭代对象数组
【发布时间】:2021-06-25 21:02:42
【问题描述】:

我有这个方法可以在文档中显示一组对象。

public File generateODSFileWithTemplate(String fileName, Object[][] lignes, File template) throws FileNotFoundException, IOException, JDOMException, TemplateException {

    final Sheet sheet = SpreadSheet.createFromFile(template).getSheet(0);
    sheet.setRowCount(lignes.length);
    
    int column = 0;
    int row = 0;
    //Iterating through the array of Object
    for(Object[] rowObj : lignes){
        for(Object colObj : rowObj){
            sheet.setValueAt(rowObj[column],column,row );
            column++;
        }
        row++;
        column = 0;
    }
    File outFile = new File(fileName);
    sheet.getSpreadSheet().saveAs(outFile);

    return outFile;
}

有没有办法使用流而不是 for 循环?

【问题讨论】:

  • 这是不可取的,因为您将使用流来操作流处理之外的现有对象(在某些情况下可能会产生不良副作用)。而column increment 可能会产生effective final 问题。现在我并不是说这是不可能的,但你这样做的方式并没有错(假设它当然达到了预期的结果)。
  • 此外,流应该倾向于使过程更清楚地反映问题陈述。就像在地图中对项目进行分组一样。我认为流式解决方案会增加不必要的复杂性,并且可以说往往会使水变得浑浊。

标签: java arrays for-loop java-8 java-stream


【解决方案1】:

我认为在这种特殊情况下使用 Stream API 是不合适的。尽管您仍然可以通过使用普通的旧循环而不是增强的循环来改进您的 for 循环:

for(int row = 0; row < lines.length; row++) {
    for(int col = 0; col < lines[row].length; col++){
        sheet.setValueAt(lines[row][col], col, row);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多