将实体类集合List<?>转为集合嵌套List<List<String>>(可用于EasyExcel导出数据时SheetData使用)
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
需求背景
在使用EasyExcel进行导出Excel文件时如果不使用实体类的方式去导出,而是使用List的方式导出那么每个sheet里面的dataList是一个List<List < String >>的一个结构,第一层集合表示行,第二层集合中的元素表示每一行的每一列的数据,现在有一下一个需求,由于业务逻辑中导出多个sheet页,每个sheet页对应一个指定的对象,而且里面有一些字段是需要导出对应到Excel中,有一些不需要。需要我们添加一个通用的工具类来将List<?>这种结构转化为List<List < String >>的形式。
测试类
People.java
package test.main;
public class People {
private Integer id;
private String name;
private String sex;
private Integer age;
public People(Integer id, String name, String sex, Integer age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
实现方法
实现过程中依赖于FastJson依赖包,请自行添加依赖
public static List<List<String>> makeSheetDataList(List<?> list, String[] fields, Class<?> classType) {
List<List<String>> dataList = new ArrayList<>();
String temp = JSONObject.toJSONString(list);
List<?> objects = JSONArray.parseArray(temp, classType);
for (Object object : objects) {
Map<String, String> map = JSONObject.parseObject(JSONObject.toJSONString(object),
new TypeReference<Map<String, String>>() {
});
List<String> tempList = new ArrayList<>();
for (String field : fields) {
tempList.add(map.get(field));
}
dataList.add(tempList);
}
return dataList;
}
运行效果
public static void main(String[] args) {
People p1 = new People(1, "huhailong", "man", 26);
People p2 = new People(2, "wuxinhua", "man", 26);
List list = new ArrayList<>();
list.add(p1);
list.add(p2);
String[] fields = { "id", "name", "sex", "age" };
List<List<String>> makeSheetDataList = makeSheetDataList(list, fields, People.class);
System.out.println(makeSheetDataList);
}
运行结果
[[1, huhailong, man, 26], [2, wuxinhua, man, 26]]
使用该方法时需要传递三个参数:
- list:需要转化的集合
- fields:对应的字段属性名,这里的顺序对应输出到excel表格中的顺序
- classType:对应的类型
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:2 个月前 )
c42183df
Bugfix 2 个月前
efa7dff6 * 重新加回 `commons-io`
2 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)