我有一个包含以下对象数组的Josn文件:
{
"tId": "Something",
"StartTime": "05/29/2013 5:28:33 PM",
"CompleteTime": "05/29/2013 5:28:33 PM",
"Status": "success",
"MachineName": "Machine",
},
我必须根据开始时间和机器名称进行排序,并且只向用户显示这两件事。如果2个或更多任务的开始时间相同,则应根据机器名称对其结果进行排序。我试图将解析后得到的JsonArray转换为List并在此之后使用自定义collections.sort。我正朝着正确的方向前进吗?如何在Collections.sort中修改比较器,以便在相同的开始时间根据机器名进行排序
JsonArray allTasks = jsonParser.parse(reader).getAsJsonArray();
ArrayList<String> list = new ArrayList<String>();
if (allTasks != null) {
int len = allTasks.size();
for (int i=0;i<len;i++){
list.add(allTasks .get(i).toString());
}
}
for (String task : list) {
// code to fetch just 2 fields from this task and then sort according to start time
}
答案 0 :(得分:7)
您的排序例程看起来像这样,具体取决于您如何进行JSON / Object映射的具体细节:
Collections.sort(myObjectList, new Comparator<MyObject>() {
@Override
int compare(MyObject a, MyObject b) {
if (a.getStartTime().equals(b.getStartTime())) {
return a.getMachineName().compare(b.getMachineName());
} else {
return a.getStartTime().compare(b.getStartTime());
}
}
});
答案 1 :(得分:6)
您应该创建一个类MyObject
来保存一个对象的数据(tId,startTime,completeTime,status,machineName)。
然后,将每个JsonObject
解析为MyObject
并将其添加到List<MyObject>
。
然后,使用Collections.sort()
和比较器对列表进行排序。