项目场景:
前台导出Excel数据,需要根据各省份自己问题数进行排序,还要根据各省份问题总数降序排列;
问题描述
根据各省份自己问题数进行排序SQL可以实现,使用group by 和order by即可。
根据各省份问题总数降序排列SQL无法实现(自己没写出来)需要后台处理;
解决思路:
1、把返回的结果集(list)根据省份分成不同的集合;
2、分别计算各省份的问题总数,并把总数作为key放到TreeMap中(jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator) 传入我们自定义的比较器即可实现按键排序。)
3、使用TreeMap对结果集进行排序
1、把返回的结果集(list)根据省份分成不同的集合;
//自己项目查询代码
Page<Fwdygzbhg> fwdygzbhgPage = fwdygzbhgBLO.queryFwdygzbhgMx(fwdygzbhgQuery);
for (int i = 0; i < result.getFwdygzbhgDTOList().size(); i++) {
if (result.getFwdygzbhgDTOList().get(i).getAaf018().equals("660000")) {
btList.add(result.getFwdygzbhgDTOList().get(i));
}
if (result.getFwdygzbhgDTOList().get(i).getAaf018().equals("650000")) {
xjList.add(result.getFwdygzbhgDTOList().get(i));
}
if (result.getFwdygzbhgDTOList().get(i).getAaf018().equals("110000")) {
bjList.add(result.getFwdygzbhgDTOList().get(i));
}
// ……多个省份
}
2、分别计算各省份的问题总数,并把总数作为key放到TreeMap中
Map<Integer, List<FwdygzbhgDTO>> groups = new TreeMap<>();
List<FwdygzbhgDTO> btList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(btList)) {
int sum = 0;
for (FwdygzbhgDTO dto : btList) {
sum += dto.getZs();
}
groups.put(sum, btList);
}
……多个省份
3、使用TreeMap对结果集进行排序
//按Key进行排序
Map<Integer, List<FwdygzbhgDTO>> resultMap = sortMapByKey(groups);
if (resultMap != null && !resultMap.isEmpty()) {
List<FwdygzbhgDTO> listDto = new ArrayList<>();
sortResult.setFwdygzbhgDTOList(listDto);
for (List<FwdygzbhgDTO> fwdygzbhgDTOS : resultMap.values()) {
sortResult.getFwdygzbhgDTOList().addAll(fwdygzbhgDTOS);
}
}
4、排序方法
public static Map<Integer, List<FwdygzbhgDTO>> sortMapByKey(Map<Integer, List<FwdygzbhgDTO>> map) {
if (map == null || map.isEmpty()) {
return null;
}
Map<Integer, List<FwdygzbhgDTO>> sortMap = new TreeMap<>(
new MapKeyComparator());
sortMap.putAll(map);
return sortMap;
}
static class MapKeyComparator implements Comparator<Integer> {
@Override
public int compare(Integer str1, Integer str2) {
//升序只使用str1.compareTo(str2),本需求需要降序
return str2.compareTo(str1);
}
}
最后来个结果页面展示,即实现了省份自己的问题数降序,也实现了不同省份问题数总和的降序
本内容只是自己项目需求解决思路,因实力有限,实现可能不够完美,欢迎大家提出优化建议。