java中List根据JSONObject中的某个字段进行排序

/ 问题解决 / 没有评论 / 62浏览

这几天碰到一个问题,就是从不同的表去拿数据,整合放到list中,然后每个对象中都有一个updateTime字段,需求是根据这个字段将这些JSONObject排序

List<JSONObject> list = new LinkedList<>();

JSONObject map1 = new JSONObject(true);
map1.put("name", "p");
map1.put("cj", "5");
map1.put("updateTime", new Date(1542679200000L));

JSONObject map2 = new JSONObject(true);
map2.put("name", "h");
map2.put("cj", "12");
map2.put("updateTime", new Date(1542675600000L));

JSONObject map3 = new JSONObject(true);
map3.put("name", "f");
map3.put("cj", "31");
map3.put("updateTime", new Date(1542675900000L));

list.add(map1);
list.add(map2);
list.add(map3);

//排序前
for (JSONObject map : list) {
    System.out.println(DateUtils.format("YYYY-MM-dd HH🇲🇲ss", map.getDate("updateTime")));
}

list.sort((o1, o2) -> {
    Long time1 = o1.getDate("updateTime").getTime(); //time1是从你list里面拿出来的第一个updateTime
    Long time2 = o2.getDate("updateTime").getTime(); //time2是从你list里面拿出来的第二个updateTime
    return name2.compareTo(name1);
});

//排序后
System.out.println("-------------------");
for (JSONObject map : list) {
    System.out.println(DateUtils.format("YYYY-MM-dd HH🇲🇲ss", map.getDate("updateTime")));
}

输出结果为:

2018-11-20 10:00:00
2018-11-20 09:00:00
2018-11-20 09:05:00
-------------------
2018-11-20 10:00:00
2018-11-20 09:05:00
2018-11-20 09:00:00

倒序排序完成,正序的话可以把neme1和name2反转即可