XDM,可以把这三个循环封装一下吗?
if (rowBefore == null && rowAfter != null) {
jsonArrayAfter = JSON.parseArray(rowAfter);
for (Object obj : jsonArrayAfter) {
for (Map.Entry<String, Object> stringObjectEntry : ((JSONObject) obj).entrySet()) {
DifferenceOfFieldsVO fieldsVO = new DifferenceOfFieldsVO();
fieldsVO.setTableName(tableName);
fieldsVO.setId(id);
fieldsVO.setFieldName(stringObjectEntry.getKey());
fieldsVO.setFieldAfter(String.valueOf(stringObjectEntry.getValue()));
list.add(fieldsVO);
}
}
} else if (rowBefore != null && rowAfter == null) {//delete
jsonArrayBefore = JSON.parseArray(rowBefore);
for (Object obj : jsonArrayBefore) {
for (Map.Entry<String, Object> stringObjectEntry : ((JSONObject) obj).entrySet()) {
DifferenceOfFieldsVO fieldsVO = new DifferenceOfFieldsVO();
fieldsVO.setTableName(tableName);
fieldsVO.setId(id);
fieldsVO.setFieldName(stringObjectEntry.getKey());
fieldsVO.setFieldBefore(String.valueOf(stringObjectEntry.getValue()));
list.add(fieldsVO);
}
}
} else if (rowBefore != null && rowAfter != null) {//update
jsonArrayBefore = JSON.parseArray(rowBefore);
for (int i = 0; i < jsonArrayBefore.size(); i++) {
JSONObject beforeObject = (JSONObject)jsonArrayBefore.get(i);
JSONObject afterObject = (JSONObject)jsonArrayBefore.get(i);
for (Map.Entry<String, Object> beforeEntry : beforeObject.entrySet()) {
DifferenceOfFieldsVO fieldsVO = new DifferenceOfFieldsVO();
fieldsVO.setTableName(tableName);
fieldsVO.setId(id);
fieldsVO.setFieldName(beforeEntry.getKey());
fieldsVO.setFieldBefore(String.valueOf(beforeEntry.getValue()));
fieldsVO.setFieldAfter(String.valueOf( afterObject.get(beforeEntry.getKey())));
list.add(fieldsVO);
}
}
}
这段代码中有一部分重复的代码,可以封装成一个单独的方法来提高代码的可读性和可维护性。你可以创建一个方法,如processEntry
,来处理这部分逻辑。
private void processEntry(JSONObject obj, String tableName, String id, String after, List<DifferenceOfFieldsVO> list) {
for (Map.Entry<String, Object> stringObjectEntry : obj.entrySet()) {
DifferenceOfFieldsVO fieldsVO = new DifferenceOfFieldsVO();
fieldsVO.setTableName(tableName);
fieldsVO.setId(id);
fieldsVO.setFieldName(stringObjectEntry.getKey());
if (after != null) {
fieldsVO.setFieldAfter(String.valueOf(stringObjectEntry.getValue()));
} else {
fieldsVO.setFieldBefore(String.valueOf(stringObjectEntry.getValue()));
}
list.add(fieldsVO);
}
}
然后你可以在你的代码中调用这个方法:
if (rowBefore == null && rowAfter != null) {
jsonArrayAfter = JSON.parseArray(rowAfter);
for (Object obj : jsonArrayAfter) {
processEntry((JSONObject) obj, tableName, id, "after", list);
}
} else if (rowBefore != null && rowAfter == null) {
jsonArrayBefore = JSON.parseArray(rowBefore);
for (Object obj : jsonArrayBefore) {
processEntry((JSONObject) obj, tableName, id, null, list);
}
} else if (rowBefore != null && rowAfter != null) {
jsonArrayBefore = JSON.parseArray(rowBefore);
for (int i = 0; i < jsonArrayBefore.size(); i++) {
JSONObject beforeObject = (JSONObject) jsonArrayBefore.get(i);
JSONObject afterObject = (JSONObject) jsonArrayBefore.get(i);
processEntry(beforeObject, tableName, id, null, list);
processEntry(afterObject, tableName, id, "after", list);
}
}
注意:在最后一个 else if 分支中,我分别对 beforeObject 和 afterObject 进行了处理。如果你的逻辑需要特别处理这两个对象,你可能需要调整这个部分的代码。
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以提供以下解决方案:
可以借助函数封装请求,接收循环变量和具体请求内容作为参数,在函数内部进行循环请求。具体步骤如下:
定义一个函数,接收循环变量名、初始值、结束值、递增递减值和循环内容作为参数。
在函数内部使用 for 循环遍历从初始值到结束值的所有取值。
在 for 循环中,通过模板字符串拼接出具体的请求地址,将循环变量和其他参数插入到字符串中。
使用 axios 库发起请求,并将请求结果存储到一个数组中。
返回数组作为函数的结果。
外部调用函数,并传入具体的循环变量名、初始值、结束值、递增递减值和循环内容,获取请求结果数组。
下面是一个示例代码,使用了 ES6 的箭头函数和 async/await 语法:
const axios = require('axios');
const loopRequests = async (name, start, end, step, content) => {
const results = [];
for (let i = start; i < end; i += step) {
const url = `http://example.com/${content}?${name}=${i}`;
const { data } = await axios.get(url);
results.push(data);
}
return results;
};
const main = async () => {
const results = await loopRequests('i', 0, 10, 1, 'example');
console.log(results);
};
main();
在上述示例代码中,loopRequests 函数接收循环变量名 name、初始值 start、结束值 end、递增递减值 step 和循环内容 content。通过 for 循环遍历整个区间,拼接出具体的请求地址并发送请求。最后将请求结果存储到一个数组中,并将结果数组作为函数的返回值。外部调用函数时,传入具体的参数,即可得到请求结果数组。