Мой пример запроса
{
"requestModel":{
"CUSTID": "100"
},
"returnParameters":[
{
"name":"NETWORK/NETID",
"datatype":"String",
"order":"asc",
"sequence":1
},
{
"name":"INFODATA/NAME",
"datatype":"String",
"order":"asc",
"sequence":1
},
{
"name":"SOURCE/SYSTEM",
"datatype":"int",
"order":"asc",
"sequence":2
},
]
}
Пример ответа
Ниже приведен мой динамически генерируемый формат карты ответа json [Параметры ответа будуткаждый раз различается в зависимости от параметров запроса],
"responseModel":{
"documents": [
{
"NETWORK":[
{"NETID":"1234"},
{"ACT":"300"}
],
"SOURCE": {
"SYSTEM":"50"
},
"INFODATA":{
"NAME":"PHIL"
}
},
{
"NETWORK":[
{"NETID":"1234"},
{"ACT":"300"}
],
"SOURCE": {
"SYSTEM":"100"
},
"INFODATA":{
"NAME":"PHIL"
}
}
]
}
Постановка задачи
Мне нужно выполнить многоуровневую сортировку на основе «returnParameters» в запросе , который является динамическим ... «порядок» указывает на возрастание (или) по убыванию, а последовательность указывает приоритет для упорядочения, как (группировать по SQL-запросу)
код
Map<String,Object> documentList = new HashMap<String,Object>();
JSONObject jsonObject= new JSONObject(response.getContent());
response.getContent () -> ничего, но он содержит ответ json в формате карты.
Now I converting the map to list of json object
JSONArray jsonArray= (JSONArray)jsonObject.get("documents");
ArrayList<JSONObject> list = new ArrayList<>();
for(int i=0;i<jsonArray.length();i++){
list.add((JSONObject) jsonArray.get(i));
}
Collections.sort(list, new ResponseSorter());
public class ResponseSorter implements Comparator<JSONObject> {
@Override
public int compare(JSONObject o1,JSONObject o2){
String s1= (String)((JSONObject) o1.get("NETWORK")).get("NETID");
String s2= (String)((JSONObject) o2.get("NETWORK")).get("NETID");
int i1=Integer.parseInt(s1);
int i2=Integer.parseInt(s2);
return i1-i2;
}
}
Я застрял здесь, чтобы продолжить.Создан один для целочисленного компаратора. Я должен создать для каждого типа данных?Также мне нужно динамически построить составной компаратор путем анализа «retunrParameters», ниже образец жестко запрограммирован, как создать динамически ??
(String)((JSONObject) o1.get("NETWORK")).get("NETID"); -> this should be dynamically framed , since "returnParameters" are also dynamic in nature.[NETWORK & NETID may not be come in another request],so my comparator should be capable enough to frame the keys in runtime
Может ли кто-нибудь помочь мне создать составной компаратор во время выполнения длясортировка?
ПРИМЕЧАНИЕ: - Java Pojo не может быть создан, поскольку ответ имеет динамический характер