方法一:每读取一行数据就放入集合,该行数据和集合作比对(行数多的时候会卡死),如果该行数据没有和集合中的数据重复就添加进集合,但是有一个问题,如果直接添加进集合A会导致数组越界(不能在for循环里面再添加数据到集合中),所以将该数据添加进新集合B,等A集合循环结束后清空A,将B赋值给A。动态添加会容易导致问题
/**
* 验证excel每行数据方法一
* rowData下一条数据
* rowDatas excel表格所有数据
* splicingValue excel中某一行的某一列数据
**/
public void validateRowData(List<RowData> rowDatas, List<RowData> rowDatasCopy,
RowData rowData, String splicingValue, String entityName) {
rowDatas.clear();
rowDatas.addAll(rowDatasCopy);
if (rowDatas != null && rowDatas.size() > 0) {
for (RowData data : rowDatas) { //data上一条数据
if (splicingValue != null && !"".equals(splicingValue)) {
if (splicingValue.equals(data.getSplicingValue())) {
if (entityName.equals(ParseConstans.ENTERPRISE_INVEST_DETAIL)) {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() + "列、第" +
rowData.getMonthColumn() + "列、第" + rowData.getTypeColumn() + "列不能和第" +
data.getRow() + "行第" + data.getUsccColumn() +
"列、第" + data.getMonthColumn() + "列、第" + data.getTypeColumn() + "列完全相同" + "<br>");
} else if (entityName.equals(ParseConstans.ENTERPRISE_BASE)) {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() + "列不能和第" +
data.getRow() + "行第" + data.getUsccColumn() + "列完全相同" + "<br>");
} else {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() + "列、第" +
rowData.getMonthColumn() + "列不能和第" + data.getRow() + "行第" + data.getUsccColumn() +
"列、第" + data.getMonthColumn() + "列完全相同" + "<br>");
}
} else {
//rowDatas.add(rowData); //在for循环里面添加数据是错误的,切记!!
//集合去重并且按照自然顺序排列
rowDatasCopy.add(rowData);
List<RowData> newList = new ArrayList<>(new TreeSet<>(rowDatasCopy));
rowDatasCopy.clear();
rowDatasCopy.addAll(newList);
}
}
}
} else {
rowDatas.add(rowData);
rowDatasCopy.add(rowData);
}
}
方法二:将excel表格所有数据存放到集合中,对集合进行双重for循环(效率高)。不像方法一,这种方法比较起来更加高效快捷。
/**
* 验证excel每行数据方法二
* rowDatas excel表格中所有数据
**/
public void validateRowData(List<RowData> rowDatas, String entityName) {
for (RowData rowData : rowDatas) {
String splicingValue = rowData.getSplicingValue();
int row = rowData.getRow();
if (splicingValue != null && !"".equals(splicingValue)) {
for (RowData data : rowDatas) {
if (row != data.getRow()) {
if (splicingValue.equals(data.getSplicingValue())) {
if (entityName.equals(ParseConstans.ENTERPRISE_INVEST_DETAIL)) {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() + "列、第" +
rowData.getMonthColumn() + "列、第" + rowData.getTypeColumn() + "列不能和第" +
data.getRow() + "行第" + data.getUsccColumn() +
"列、第" + data.getMonthColumn() + "列、第" + data.getTypeColumn() + "列完全相同" +
"<br>");
} else if (entityName.equals(ParseConstans.ENTERPRISE_BASE)) {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() +
"列不能和第" +
data.getRow() + "行第" + data.getUsccColumn() + "列完全相同" + "<br>");
} else {
errorString.append("第" + rowData.getRow() + "行第" + rowData.getUsccColumn() + "列、第" +
rowData.getMonthColumn() + "列不能和第" + data.getRow() + "行第" + data
.getUsccColumn() +
"列、第" + data.getMonthColumn() + "列完全相同" + "<br>");
}
}
}
}
}
}
//验证excel表格中数据与数据库中数据
Map map = new HashMap();
map = CommonUtil.convertFormData(map);
validateRowData1(rowDatas, entityName, map);
}
注:如果只是对行与行之间的某一列进行重复校验,那么就更简单了,只需要将该列数据放入集合
if (list.contains(cellValue)) {
errorString.append("第" + curRow + "行,第" + curCol + "列:" + rulMsg + "<br>");
} else {
list.add(cellValue);
}
网友评论