Apache POI
在业务开发中我们经常会遇到Excel的导入导出,而 Apache POI 是Java开发者常用的API。
【https://poi.apache.org/components/spreadsheet/index.html】
GridExcel
Universal solution for reading and writing simply Excel based on functional programming and POI EventModel
GridExcel是基于Java8函数式编程和POI EventModel实现的用于Excel简单读写的通用解决方案。
-
基于POI EventModel,在读写数据量非常大的Excel时,降低内存占用避免OOM与频繁FullGC
-
基于函数编程,支持关联对象等多种复杂情况的处理,学习成本低
-
支持流式API,使代码编写和理解更简单,更直观
EventModel
什么是EventModel?在POI FAQ(常见问题解答)【https://poi.apache.org/help/faq.html#faq-N100C2】官方给出解释:
The SS eventmodel package is an API for reading Excel files without loading the whole spreadsheet into memory. It does require more knowledge on the part of the user, but reduces memory consumption by more than tenfold. It is based on the AWT event model in combination with SAX. If you need read-only access, this is the best way to do it.
SS eventmodel包是一个用于读取Excel文件而不将整个电子表格加载到内存中的API。 它确实需要用户掌握更多知识,但是将内存消耗减少了十倍以上。 它基于AWT(Abstract Window Toolkit)event model与SAX的结合。 如果您需要只读访问权限,这是最好的方式。
函数编程
说到函数编程,就不得不提Lambda表达式,如果对Java8中的Lambda不了解或理解不深刻,可以看下甲骨文官网给出的这篇文章,【https://www.oracle.com/technetwork/articles/java/architect-lambdas-part1-2080972.html】,个人认为这是Java8 Lambda从入门到进阶最好的文章之一。
其中函数编程的目的就是实现代码块传递
,即,将方法作为参数在方法间传递。为此,随着Java语言的发展,不断出现一些解决方案:
-
Java 1.0, 使用Abstract Window Toolkit (AWT) EventModel来实现,但笨拙且不可行
-
Java 1.1,提出一系列“Listeners”
-
后来使用
内部类
和匿名