【发布时间】:2019-03-29 09:51:32
【问题描述】:
我需要将 List > 的格式更改为 List > 的另一种格式。我有这个收藏:
[{
"OPERATION_NAME": "COPY",
"OPERATION_STATUS": "READY",
"COUNT(1)": 1
}, {
"OPERATION_NAME": "ARCHIVE",
"OPERATION_STATUS": "READY",
"COUNT(1)": 1
}, {
"OPERATION_NAME": "EXPORT_CA",
"OPERATION_STATUS": "READY",
"COUNT(1)": 1
}, {
"OPERATION_NAME": "MERGE",
"OPERATION_STATUS": "READY",
"COUNT(1)": 1
}, {
"OPERATION_NAME": "MERGE",
"OPERATION_STATUS": "DONE",
"COUNT(1)": 1
}]
我把它改成这样:
[{
"READY": 0,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "MERGE"
}, {
"READY": 0,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "ARCHIVE"
}, {
"READY": 0,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "COPY"
}, {
"READY": 0,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "EXPORT_CA"
}]
但我无法检索 COUNT(1) 的值并将其设置为我正在创建的新对象。
最后我应该有这个:
[{
"READY": 1,
"NEW": 0,
"DONE": 1,
"OPERATION_NAME": "MERGE"
}, {
"READY": 1,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "ARCHIVE"
}, {
"READY": 1,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "COPY"
}, {
"READY": 1,
"NEW": 0,
"DONE": 0,
"OPERATION_NAME": "EXPORT_CA"
}]
这是我将对象转换为另一个对象的函数:
private List<Map<String, Object>> transformObject(List<Map<String, Object>> resDB) {
Gson gson = new Gson();
LOGGER.info("Json response : {}", gson.toJson(resDB));
List<Map<String, Object>> result = new ArrayList<>();
List<String> listOfOperationName = new ArrayList<>();
List<String> listOfOperationStatus = new ArrayList<>();
// Retrieve OP Name and OP Status
for (Map<String, Object> map : resDB) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if(key.equals("OPERATION_NAME")) {
listOfOperationName.add(value.toString());
} else if(key.equals("OPERATION_STATUS")) {
listOfOperationStatus.add(value.toString());
}
}
}
// Remove duplicates
Set<String> setName = new HashSet<>(listOfOperationName);
listOfOperationName.clear();
listOfOperationName.addAll(setName);
// Remove duplicates
Set<String> setStatus = new HashSet<>(listOfOperationStatus);
listOfOperationStatus.clear();
listOfOperationStatus.addAll(setStatus);
// Create field OP Name with value
for (String tempOpName : listOfOperationName) {
Map<String, Object> tempObjName = new HashMap<>();
tempObjName.put("OPERATION_NAME", tempOpName);
for (String tempOpStatus : listOfOperationStatus) {
tempObjName.put(tempOpStatus, 0);
}
result.add(tempObjName);
}
Gson gsonResult = new Gson();
LOGGER.info("Json response : {}", gsonResult.toJson(result));
return result;
}
如果你有想法怎么做,那就太好了!非常感谢!
【问题讨论】:
-
在我看来,您真正需要的是
Map<Operation, Map<Status, Integer>>,例如{ "Merge" : { "Ready" : 1, "Done" : 1, "New" : 0}, ...} -
其实我需要一个 List