List<Map<String,Object>>按某个字段排序

来源:互联网 发布:苏联海军 知乎 编辑:程序博客网 时间:2024/06/06 02:11

对service层返回的数据进行排序

1、controller

@GetMapping(value = "/per/{perId}", produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String getInfo(@PathVariable String perId) throws ControllerException {    try {        return JsonUtilsHelper.objectToJsonString(perService.getInfoMaps(perId));    } catch (JsonProcessingException e) {        throw new ControllerException(e.getMessage());    }}

2、service

按id升序

public List<Map<String, Object>> getInfoMaps(String perId) {    List<Map<String, Object>> list = new ArrayList<>();    List<PerEntity> perEntityList =perRepository.findByPerId(perId);    if (!CollectionUtils.isEmpty(perEntityList)) {        perEntityList.forEach(perEntity -> {            Map<String, Object> map = new HashMap<>();            map.put("id", perEntity.getId());            map.put("name", perEntity.getName());            map.put("updatedTime", perEntity.getUpdatedTime());            list.add(map);        });    }    Collections.sort(list, new MapComparatorAsc());    return list;}
class MapComparatorAsc implements Comparator<Map<String, Object>> {    @Override    public int compare(Map<String, Object> o1,Map<String, Object> o2) {        String s1 = (String) o1.get("id");        String s2 = (String) o2.get("id");        if (s1 != null) {            return id1.compareTo(s2);        }     return 0;    }}
3、按更新时间降序
public List<Map<String, Object>> getInfoMaps(String perId) {    List<Map<String, Object>> list = new ArrayList<>();    List<PerEntity> perEntityList =perRepository.findByPerId(perId);    if (!CollectionUtils.isEmpty(perEntityList)) {        perEntityList.forEach(perEntity -> {            Map<String, Object> map = new HashMap<>();            map.put("id", perEntity.getId());            map.put("name", perEntity.getName());            map.put("updatedTime", perEntity.getUpdatedTime());            list.add(map);        });    }    Collections.sort(list, new MapComparatorDesc());    return list;}
class MapComparatorDesc implements Comparator<Map<String, Object>> {    @Override    public int compare(Map<String, Object> o1,Map<String, Object> o2) {        Timestamp t1 = (Timestamp)o1.get("updatedTime");        Timestamp t2 = (Timestamp)o2.get("updatedTime");        if (t2 != null) {            return t2.compareTo(t1);        }        return 0;    }}