perf[storage]: 使用var简化代码

This commit is contained in:
godotg
2022-09-03 15:57:22 +08:00
parent 0b2ea05be0
commit 3911292276
2 changed files with 54 additions and 59 deletions
@@ -24,59 +24,26 @@ import org.apache.commons.csv.CSVRecord;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author meiwei666
* @version 4.0
*/
public class CsvReaderUtils {
public abstract class CsvReaderUtils {
/**
* 构建配置表消息头
* @param iterator
* @param fileName
* @return
*/
private static List<ResourceHeader> getHeaders(Iterator<CSVRecord> iterator, String fileName) {
// 获取配置表的有效列名称,默认第一行就是字段名称
var fieldRow = iterator.next();
if (fieldRow == null) {
throw new RunException("无法获取资源[class:{}]的Excel文件的属性控制列", fileName);
}
//默认第二行字段类型
var typeRow = iterator.next();
if (typeRow == null) {
throw new RunException("无法获取资源[class:{}]的Excel文件的类型控制列", fileName);
}
var descRow = iterator.next();
List<ResourceHeader> headers = new ArrayList<>();
for (int i = 0; i < fieldRow.size(); i++) {
String fieldName = fieldRow.get(i);
if (fieldName == null) {
throw new RunException("{}列名不能为空,第{}列没有配置名字", fileName ,i + 1);
}
String filedType = typeRow.get(i);
if (filedType == null) {
throw new RunException("{}列类型不能为空,第{}列没有配置类型", fileName ,i + 1);
}
// String desc = descRecord.get(i);
headers.add(ResourceHeader.valueOf(fieldName, filedType, i ));
}
return headers;
}
public static ResourceData readResourceDataFromCSV(InputStream input, String fileName){
CSVParser records = parseCsv(input, fileName);
Iterator<CSVRecord> iter = records.iterator();
List<ResourceHeader> headers = getHeaders(iter, fileName);
List<List<String>> rows = new ArrayList<>();
while (iter.hasNext()) {
CSVRecord record = iter.next();
List<String> data = new ArrayList<>();
for (ResourceHeader header : headers) {
String value = record.get(header.getIndex());
public static ResourceData readResourceDataFromCSV(InputStream input, String fileName) {
var records = parseCsv(input, fileName);
var iterator = records.iterator();
var headers = getHeaders(iterator, fileName);
var rows = new ArrayList<List<String>>();
while (iterator.hasNext()) {
var record = iterator.next();
var data = new ArrayList<String>();
for (var header : headers) {
var value = record.get(header.getIndex());
if (StringUtils.isBlank(value)) {
value = StringUtils.EMPTY;
}
@@ -87,6 +54,39 @@ public class CsvReaderUtils {
return ResourceData.valueOf(fileName, headers, rows);
}
/**
* 构建配置表消息头
*/
private static List<ResourceHeader> getHeaders(Iterator<CSVRecord> iterator, String fileName) {
// 获取配置表的有效列名称,默认第一行就是字段名称
var fieldRow = iterator.next();
if (fieldRow == null) {
throw new RunException("无法获取资源[class:{}]的csv文件的属性控制列", fileName);
}
//默认第二行字段类型
var typeRow = iterator.next();
if (typeRow == null) {
throw new RunException("无法获取资源[class:{}]的csv文件的类型控制列", fileName);
}
// 默认第三行为描述,需要的时候再使用
var descRow = iterator.next();
var headers = new ArrayList<ResourceHeader>();
for (var i = 0; i < fieldRow.size(); i++) {
var fieldName = fieldRow.get(i);
if (fieldName == null) {
throw new RunException("{}列名不能为空,第{}列没有配置名字", fileName, i + 1);
}
var filedType = typeRow.get(i);
if (filedType == null) {
throw new RunException("{}列类型不能为空,第{}列没有配置类型", fileName, i + 1);
}
headers.add(ResourceHeader.valueOf(fieldName, filedType, i));
}
return headers;
}
private static CSVParser parseCsv(InputStream input, String fileName) {
try {
return CSVFormat.EXCEL.parse(new InputStreamReader(input));
@@ -20,7 +20,9 @@ import com.zfoo.protocol.util.StringUtils;
import com.zfoo.storage.model.resource.ResourceData;
import com.zfoo.storage.model.resource.ResourceEnum;
import com.zfoo.storage.model.resource.ResourceHeader;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.File;
import java.io.IOException;
@@ -32,7 +34,7 @@ import java.util.stream.Collectors;
* @author meiwei666
* @version 4.0
*/
public class ExcelReaderUtils {
public abstract class ExcelReaderUtils {
public static void excelConvertJson(String inputDir, String outputDir) throws IOException {
var listFiles = FileUtils.getAllReadableFiles(new File(inputDir))
@@ -61,13 +63,7 @@ public class ExcelReaderUtils {
//设置所有列
var headers = getHeaders(iterator, fileName);
// 行数定位到有效数据行,默认是第四行为有效数据行
// var iterator = sheet.iterator();
// iterator.next();
// iterator.next();
// iterator.next();
// 从ROW_SERVER这行开始读取数据
List<List<String>> rows = new ArrayList<>();
var rows = new ArrayList<List<String>>();
while (iterator.hasNext()) {
var row = iterator.next();
@@ -87,19 +83,18 @@ public class ExcelReaderUtils {
return ResourceData.valueOf(fileName, headers, rows);
}
// 只读取代码里写的字段
private static List<ResourceHeader> getHeaders(Iterator<Row> iterator, String fileName) {
// var iterator = sheet.iterator();
// 获取配置表的有效列名称,默认第一行就是字段名称
var fieldRow = iterator.next();
if (fieldRow == null) {
throw new RunException("无法获取资源[class:{}]的Excel文件的属性控制列", fileName);
}
//默认第二行字段类型
// 默认第二行字段类型
var typeRow = iterator.next();
if (typeRow == null) {
throw new RunException("无法获取资源[class:{}]的Excel文件的类型控制列", fileName);
}
// 默认第三行为描述,需要的时候再使用
var desRow = iterator.next();
var headerList = new ArrayList<ResourceHeader>();
var cellFieldMap = new HashMap<String, Integer>();