patternjavaMinor
Refactor code to populate a spreadsheet
Viewed 0 times
codepopulaterefactorspreadsheet
Problem
My code looks ugly. What can you recommend? I already know about
Enum; maybe it's a good variant for this situation. Anything else?private void writerContent(Integer firstRow, List records){
int firstColumn=0;
int lastColumn=7;
XSSFSheet sheet = workBook.getSheetAt(0);
for (int lineId=firstRow;lineId<records.size();lineId++) {
Row row = sheet.getRow(lineId);
for (int columnId=firstColumn;columnId<lastColumn;columnId++){
switch (columnId){
case 0: row.createCell(columnId).setCellValue(records.get(lineId).getNumber()); break;
case 1: row.createCell(columnId).setCellValue(records.get(lineId).getName()); break;
case 2: row.createCell(columnId).setCellValue(records.get(lineId).getCode()); break;
case 3: row.createCell(columnId).setCellValue(records.get(lineId).getCount()); break;
case 4: row.createCell(columnId).setCellValue(records.get(lineId).getSimultaneouslyProcessedProducts()); break;
case 5: row.createCell(columnId).setCellValue(records.get(lineId).isSimultaneousProcessing()); break;
case 6: row.createCell(columnId).setCellValue(records.get(lineId).getInterchangeability()); break;
}
}
}
}Solution
Why don't you unroll the inner loop? So the final method will be like
private void writerContent(Integer firstRow, List records) {
XSSFSheet sheet = workBook.getSheetAt(0);
for (int lineId=firstRow; lineId<records.size(); lineId++) {
Record rec = records.get(lineId);
Row row = sheet.getRow(lineId);
row.createCell(0).setCellValue(rec.getNumber());
row.createCell(1).setCellValue(rec.getName());
row.createCell(2).setCellValue(rec.getCode());
row.createCell(3).setCellValue(rec.getCount());
row.createCell(4).setCellValue(rec.getSimultaneouslyProcessedProducts());
row.createCell(5).setCellValue(rec.isSimultaneousProcessing());
row.createCell(6).setCellValue(rec.getInterchangeability());
}
}Code Snippets
private void writerContent(Integer firstRow, List<Record> records) {
XSSFSheet sheet = workBook.getSheetAt(0);
for (int lineId=firstRow; lineId<records.size(); lineId++) {
Record rec = records.get(lineId);
Row row = sheet.getRow(lineId);
row.createCell(0).setCellValue(rec.getNumber());
row.createCell(1).setCellValue(rec.getName());
row.createCell(2).setCellValue(rec.getCode());
row.createCell(3).setCellValue(rec.getCount());
row.createCell(4).setCellValue(rec.getSimultaneouslyProcessedProducts());
row.createCell(5).setCellValue(rec.isSimultaneousProcessing());
row.createCell(6).setCellValue(rec.getInterchangeability());
}
}Context
StackExchange Code Review Q#30717, answer score: 8
Revisions (0)
No revisions yet.