伪代码
public void test(String filePath) {
// Step 1. convert file to data list
Map<String, List<?>> map = getUserList(filePath);
if (map == null) {
throw new GlobalException("集合为空!");
}
List<Apple> appleList = (List<Apple>) map.get("apple");
List<Banana> bananaList = (List<Banana>) map.get("banana");
// Step 2. insert data from list to DB
if (appleList != null) {
appleMapper.batchInsertApples(appleList);
}
if (bananaList != null) {
bananaMapper.batchInsertBananas(bananaList);
}
}
private Map<String, List<?>> getUserList(String filePath) {
Map<String, List<?>> resultMap = new HashMap<>();
List<Apple> appleList = new ArrayList<>();
List<Banana> bananaList = new ArrayList<>();
try {
FileReader fr = new FileReader(filePath, "UTF-8"); // htool 实现
List<String> lines = fr.readLines();
if (lines.size() == 0) {
return null;
}
String[] columnNames = lines.get(0).split("\t"); // 列名
for (int i = 1; i < lines.size(); i++) { // 每列数据
List<String> list = Arrays.asList(lines.get(i).split("\t"));
Map<String, Object> map = new HashMap<>();
for (int j = 0; j < list.size(); j++) {
map.put(columnNames[j], list.get(j));
}
JSONObject jsonObject = new JSONObject(map);
userList.add(JSON.toJavaObject(jsonObject, Apple.class));
userRoleList.add(JSON.toJavaObject(jsonObject, Banana.class));
}
resultMap.put("apple", appleList);
resultMap.put("banana", bananaList);
} catch (IORuntimeException e) {
log.error("File doesn't exist.");
e.printStackTrace();
}
return resultMap;
}
Class<T> vs Class<?>
- Class<T>在实例化的时候,T要替换成具体类
- Class<?>它是个通配泛型,?可以代表任何类型,主要用于声明时的限制情况
public Class<?> clazz; --- 正确
public Class<T> clazz; --- 错误
当不知道声明何种类型的Class的时,可以定义一个Class<?>。Class<?>可以用于参数类型定义,方法返回值定义等。