Java同一map集合内元素比较并去重
之前做了一个项目需求是前端要展示一到十二月份的数据,大概是这样的
但数据库查出的就值不可能每月都有固定的值 ,是这样的
为了方便前端展示对于没有的值则需要填充为0,因为有些值是固定的则可以通过数值来填充,然后通过集合添加到源数据中,但会有重复数据,则需要进一步处理,去掉没用的数据
具体实现思路如下:
public Map<String, Object> selectRegionalAnalysis(Map<String, Object> para) {
Map<String,Object> resultMap = new HashMap<String,Object>();
Set<Map<String, Object>> data = new HashSet<>();
try {
String[] months= {"01月","02月","03月","04月","05月","06月","07月","08月","09月","10月","11月","12月"};
String[] mattertype= {"衣服","鞋子"};
List<Map<String, Object>> list = this.hsxqMattersReportMapper.selectRegionalAnalysis(para);
//Map<Object, List<Map<String,Object>>> result = report.stream().collect(Collectors.groupingBy(c -> c.get("mattermonth")));
//通过循环填补空缺的值,但会产生重复数据
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < months.length; j++) {
String mattermonth = list.get(i).get("mattermonth").toString();
String counts = list.get(i).get("counts").toString();
String mattername = list.get(i).get("mattername").toString();
for (int k = 0; k < mattertype.length; k++) {
if (!months[j].equals(mattermonth)) {
Map<String, Object> result = new HashMap();
result.put("mattermonth", months[j]);
result.put("counts", 0);
result.put("mattername",mattertype[k]);
data.add(result);
} else {
Map<String, Object> result = new HashMap();
result.put("mattermonth", mattermonth);
result.put("counts", counts);
result.put("mattername", mattername);
data.add(result);
}
}
}
}
List<Map<String,Object>> dataList = new ArrayList<>(data);
//排序(这步可省略)
Collections.sort(dataList, new Comparator<Map<String,Object>>(){
public int compare(Map<String,Object> o1,Map<String,Object> o2){
return o2.get("mattermonth").toString().compareTo(o1.get("mattermonth").toString());
}
});
// 从dataList中索引为0开始往后遍历
for (int i = 0; i < dataList.size() - 1; i++) {
// 从list中索引为 list.size()-1 开始往前遍历
for (int j = dataList.size() - 1; j > i; j--) {
// 同集合内进行比较 i 正序, j 倒序
if (dataList.get(j).get("mattermonth").equals(dataList.get(i).get("mattermonth")) && dataList.get(j).get("mattername").equals(dataList.get(i).get("mattername"))) {
// 根据条件去重
if (Integer.valueOf(dataList.get(j).get("counts").toString())>0){
dataList.remove(i);
}else{
dataList.remove(j);
}
}
}
}
ReturnUtil.createSuccess(resultMap,dataList, CommonRest.QUERY_SUCCESS);
} catch (Exception e) {
e.printStackTrace();
ReturnUtil.createError(resultMap, CommonRest.OPER_FAILD);
}
return resultMap;
}
有不懂的地方可以留言,觉得不错请顶一下呗