java - 处理集合的通用函数

标签 java

我有一个这样的功能

    private void writeResultsIntoSheets(WritableWorkbook workbook, List<JournalEntry> summaries) throws WriteException, RowsExceededException {
        String sheetName = "Journal Entry Summary";

        WritableSheet sheet = workbook.getSheet(sheetName);
        if (sheet == null) {
            int sheetIndex = 0;
            if (workbook.getNumberOfSheets() > 0) sheetIndex = workbook.getNumberOfSheets()-1;
            sheet = workbook.createSheet(sheetName, sheetIndex); //add behind
        }

        Integer row = 0;

        int col = -1;
        sheet.addCell(new Label(++col, row, "SN"));
        sheet.addCell(new Label(++col, row, "Account Name"));
        sheet.addCell(new Label(++col, row, "Currency"));
        sheet.addCell(new Label(++col, row, "Amount"));
        sheet.addCell(new Label(++col, row, "Created On"));

        for (JournalEntry s : summaries) {
            row++;

            //write data
            col = -1;
            sheet.addCell(new Label(++col, row, (row) + "."));
            sheet.addCell(new Label(++col, row, s.getAccount().getName()));
            sheet.addCell(new Label(++col, row, s.getCurrency().getCode()));
            sheet.addCell(new Label(++col, row, String.valueOf(s.getAmount())));
            sheet.addCell(new Label(++col, row, String.valueOf(s.getCreatedOn())));

        }
    }

基本上,它将读取 JournalEntry 实体列表,并将特定值写入 Excel 文件的行中。现在我必须对其他十几个实体执行相同的操作,每个实体都有不同的值要写下来。我如何将它变成一个通用函数并应用于其他函数?

最佳答案

使用模板模式:

public abstract class SheetWriter<T> {
     private final void writeResultsIntoSheets(WritableWorkbook workbook, List<T> summaries) throws WriteException, RowsExceededException {
        String sheetName = getSheetName();

        WritableSheet sheet = workbook.getSheet(sheetName);
        if (sheet == null) {
            int sheetIndex = 0;
            if (workbook.getNumberOfSheets() > 0) sheetIndex = workbook.getNumberOfSheets()-1;
            sheet = workbook.createSheet(sheetName, sheetIndex); //add behind
        }

        int row = 0;
        writeHeadings(sheet, row);

        for (T s : summaries) {
            row++;
            writeRow(sheet, s, row);
        }
    }

    protected abstract String getSheetName();
    protected abstract void writeHeadings(WritableSheet sheet, int row) throws WriteException;
    protected abstract void writeRow(WritableSheet sheet, T item, int row) throws WriteException;
}

然后,对于每个实体,定义 SheetWriter 的子类并实现 3 个抽象方法。

关于java - 处理集合的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760957/

相关文章:

java - 从对象数组数据java中删除重复项

java - 如何使用 String.format() 打印两个对象

java - 什么时候在 Java 中使用 'this' 关键字?

java - Jackson json反序列化,根元素来自json

java - Java 中类似 Python 的文档测试?

java - 接受泛型类作为参数的 Mockito 模拟方法调用

java - 如何使用 ehcache 重新加载数据?

java - Apache Karaf - 缺少依赖项(看起来是数据源)

java - 如何通过 Drawable 文件夹中的 XML 文件为 TextView 创建背景

java - 为什么当我增加新时代内存时,Minor GC 时间会增加