java easyreport 导入excel、 txt 数据关联集合置入对象(三)

接上一节,获取的Student关联的Teacher集合有且只有一个,如何置入多个呢。



自定义StudentMatcher实现MatchAbled方法

package matcher;

import java.util.List;

import java.util.Map;

import model.Student;

import com.easyReport.read.MatchAbled;

public class StudentMatcher implements MatchAbled<Student>{

@Override

public boolean matchRowBean(Student student, List<Student> students) {

if(!students.contains(student)){

return true;

}

Student stu = students.get(students.indexOf(student));

stu.getTeachers().addAll(student.getTeachers());

return false;

}

@Override

public boolean matchRowMap(Map<String, Object> studentMap,

List<Map<String, Object>> studentMaps) {

return true;

}

}

Student类generator hashcode和equals方法

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

导入数据

姓名 年龄 科目 分数 教师姓名 教师性别
王老五 12 语文 80 张三丰
王老五 12 语文 80 王重阳
王老五 12 语文 80 华佗
李老六 15 语文 76 华佗
李老六 15 语文 76 张无忌

BasicTest类

实现方法

//matcher匹配器

protected MatchAbled<T> refMatcher(){

return null;

}

AbstractExcelTest类构造Reader修改

protected ConvertReader buildReader() {

return new ExcelReader(new ReaderContext(bulidReadTemp()),refMatcher());

}

Excel导入Demo TestExcelMatchAble

package example;

import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;

import matcher.StudentMatcher;

import model.Student;

import model.Teacher;

import test.AbstractExcelTest;

import com.easyReport.read.MatchAbled;

import com.easyReport.read.temp.PropertyTemp;

import com.easyReport.read.temp.ReadTemp;

import formater.SexFormater;

public class TestExcelMatchAble extends AbstractExcelTest<Student> {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test3.xls"));

testReadBean(fileInputStream);

// testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}

//重写方法实现学生匹配

@Override

protected MatchAbled<Student> refMatcher() {

return new StudentMatcher();

}

@Override

protected ReadTemp bulidReadTemp() {

ReadTemp readTemp = new ReadTemp(1);

readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));

readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));

readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));

readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));

readTemp.addPropertyTemp(new PropertyTemp("教师姓名", "teachers.name"));

readTemp.addPropertyTemp(new PropertyTemp("教师性别", "teachers.sex",new SexFormater()));

return readTemp;

}

//迭代并输出教师信息

@Override

protected void writeBeanList(List<Student> modelLists) {

System.out.println("--------------bean---------------");

for (Student s : modelLists) {

System.out.println(s.getName() + "|"

+ s.getAge()+s.getCourse().getName()+"|"+s.getCourse().getScore());

System.out.println("---------Teacher-------------------");

for(Teacher t : s.getTeachers()){

System.out.println(t);

}

}

}

@Override

protected void writeMapList(List<Map<String, Object>> mapLists) {

System.out.println("--------------map---------------");

for (Map<String, Object> m : mapLists) {

System.out.println(m.get("name") + "|" + m.get("age")+"|" + m.get("course.name")+"|" + m.get("course.score")+

"|"+m.get("teachers.name")+"|"+m.get("teachers.sex"));

}

}

}

运行结果:

--------------bean---------------

王老五|12语文|80.0|

---------Teacher-------------------

张三丰|M

王重阳|M

华佗|M

李老六|15语文|76.0|

---------Teacher-------------------

华佗|M

张无忌|M

MatchAble接口用于匹配对象,返回true匹配成功,对象加入到集合中,返回false匹配失败,对象不能加入集合中。

时间: 2024-08-30 02:14:55

java easyreport 导入excel、 txt 数据关联集合置入对象(三)的相关文章

java easyreport 导入excel、 txt 数据简单实现(一)

一直在看博客,却不知道怎么写,但是总是想写点什么,犹豫了两三天,决定还是写点东西吧,来和大家分享下. 今年上半年时候接到了一个需求,具体什么需求就不说了,要求导入excel数据,并提示每一行错误信息.接到手后,查看之前的导入excel报表的代码,发现只有初始化workBook和根据cell获取cell 字符串值得通用方法.觉得可利用的东西太少了,于是决定就构建一个通用的实现导入excel报表的工具包. 实现思路大致是这样的: 提供模板,模板包含读起始行.属性模板集合.读批次.校验出错中端. 添加

java easyreport 导入excel、 txt 数据复合属性(二)

在导入报表的时候,经常会遇到对象属性是集合或数组形似的,如学生会有多个老师,那么这种属性是集合或数组形式的报表如何设置,以及导入呢. Teacher类 package model; public class Teacher { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; }

java easyreport 导入excel、 txt 数据txt按字节导入(七)

有时候导入txt文件不一定是采用分隔符方式导入,而是采用按字节.字符长度导入,比如银联对账文件. 导入txt数据 姓名 年龄科目分数 陈寻  12语文67 王老五12语文80 柯景腾13语文78 沈佳宜14语文88 王小贱15语文60 黄小仙12语文54 李大仁14语文76 程又青13语文58 方茴  12语文87 沈晓棠13语文89 林嘉茉14语文68 赵烨  14语文50 苏凯  12语文78 乔燃  13语文90 我们采用iso8859-1单字节编码读取文件数据,一个汉字占2字节. 导入d

java easyreport 导入excel、 txt 数据数据格式校验(六)

在大部分情况下我们需要对导入数据的内容.格式进行合法性验证,验证不通过需要我们提示错误信息. 导入xls数据内容 姓名 年龄 科目 分数 王老五 12 语文 80 柯景腾 13 语文 78 沈佳宜 14 语文 88 王小贱 15 语文 60 黄小仙 12 语文 54 李大仁 14 语文 76 程又青 13 语文 58 陈寻 12 语文 67 方茴 12 语文 87 沈晓棠 13 语文 89 林嘉茉 14 语文 68 赵烨 14 语文 50 苏凯 12 语文 78 乔燃 13 语文 90 我们需要

java easyreport 导入excel、 txt 数据行列索引(四)

姓名 年龄 科目 分数 教师姓名 教师性别 王老五 12 语文 80 张三丰 男 我们要求导入数据中不包含科目和分数. 导入demo TestExcelIndex类 package example; import java.io.File; import java.io.FileInputStream; import java.util.List; import java.util.Map; import model.Student; import test.AbstractExcelTest;

java easyreport 导入excel、 txt 数据批量读取(五)

有时候我们需要读的报表数据很大,这时候一次加载所有数据有可能会出现内存溢出,所以我们需要采用批量读取来实现. 导入数据test5.xls 姓名 年龄 科目 分数 王老五 12 语文 80 柯景腾 13 语文 78 沈佳宜 14 语文 88 王小贱 15 语文 60 黄小仙 12 语文 54 李大仁 14 语文 76 程又青 13 语文 58 陈寻 12 语文 67 方茴 12 语文 87 沈晓棠 13 语文 89 林嘉茉 14 语文 68 赵烨 14 语文 50 苏凯 12 语文 78 乔燃 1

Java版将EXCEL表数据导入到数据库中

1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls")); //获取该工作表中的第一个工作表 Sheet sheet=workBook.getSheet(0); //获取该工作表的行数,以供下面循环使用 int rowSize=sheet.getRows(); for(int i=0;i<rowSize;i++) { //编号 String

c#导入excel 绑定数据 repeat为例子

先读取Excel文件并存到dataset 1 public DataSet ExcelToDataTable(string filename, string strsheetname) 2 { 3 try 4 { 5 //源的定义 6 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Pro

使用jxls技术导入Excel模版数据(转自其他博客)

第一步:先确定好Excel导入的格式以及各表格字段值的含义 第二步:定义好解析的XML--videoConfig.xml <?xml version="1.0" encoding="UTF-8"?> <workbook> <worksheet name="Sheet1"> <section startRow="0" endRow="0"/> <loop