迭代嵌入式循环迭代或功能方式的最佳方法是什么?

时间:2014-05-05 16:25:07

标签: java functional-programming apache-poi guava

我正在研究一些使用Guava迭代嵌入式循环的示例,以分析在这种情况下更适合的内容。

我们的环境使用java 6,我们需要使用Apache POI创建一个excel解析器。

发现这个例子有两个嵌入式for循环:

FileInputStream file = new FileInputStream(new File("C:\\test.xls"));

//Get the workbook instance for XLS file 
HSSFWorkbook workbook = new HSSFWorkbook(file);

//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);

//Iterate through each rows from first sheet
for (Row row : sheet) {

    //For each row, iterate through each columns
    for (Cell cell : row) {

        switch(cell.getCellType()) {
            case Cell.CELL_TYPE_BOOLEAN:
                System.out.print(cell.getBooleanCellValue() + "\t\t");
                break;
            case Cell.CELL_TYPE_NUMERIC:
                System.out.print(cell.getNumericCellValue() + "\t\t");
                break;
            case Cell.CELL_TYPE_STRING:
                System.out.print(cell.getStringCellValue() + "\t\t");
                break;
        }
    }
    System.out.println("");
}

file.close();
FileOutputStream out = new FileOutputStream(new File("C:\\test.xls"));
workbook.write(out);
out.close();

我想问一下,使用while / for循环或番石榴过滤器迭代这个的最佳方法是什么?顺便说一下,还发现了可能适合的番石榴FluentIterable,但我对功能方法并不熟悉。

你可以帮我一把吗?提前致谢

1 个答案:

答案 0 :(得分:2)

如果确实希望使用功能方法来解决此问题,您可以为Iterator实现一个仿函数,并映射一个函数,该函数将单元格类型格式化为{{1} 1}}。

一元功能界面:

rowIterator

public interface Fn1<A,B> { B apply(A a); } 的仿函数:

Iterator

格式函数(对您而言,这需要public class IteratorFunctor<A> { public final Iterator<A> i; private IteratorFunctor(Iterator<A> _i) { i = _i; } public <B> IteratorFunctor<B> map(Fn1<A,B> f) { List<B> bs = new LinkedList<B>(); while (i.hasNext()) { bs.add(f.apply(i.next())); } return apply(bs.iterator()); } public static <A> IteratorFunctor<A> apply(Iterator<A> _i) { return new IteratorFunctor<A>(_i); } } 并返回Cell}:

String

演示:

public static String format(int x) {
  switch (x) {
    case 1:
      return "one";
    case 2:
      return "two";
    default:
      return "big";
  }
}