明明已经用了new Hash,改变map的值后,原map的值还是发生了改变

明明已经用了new Hash,改变map的值后,原map的值还是发生了改变

public Map<String, Object> materialApproachWeekInfo(String constructionId) {
        List<String> dateList=materialApproachMapper.getNearDays();
        Map<String,Object> map=new HashMap<>();
        Map<String,Double> mapvalue=new HashMap<>();
        for (String date : dateList){
            List<String> namelist=materialApproachMapper.materialApproachNameByDate(constructionId,date);
            for(String name : namelist){
                mapvalue.clear();
                Double value = materialApproachMapper.materialApproachInfoByDate(constructionId, date, name);
                mapvalue.put(name,value);
            }
            map.put(date,mapvalue);
        }
        return map;
    }

img

导致最后map上所有key的值都一样了

在遍历时和存储前,打印一下date的值,看下值是否一致。

for (String date : dateList){
//输出date
            List<String> namelist=materialApproachMapper.materialApproachNameByDate(constructionId,date);
            for(String name : namelist){
                mapvalue.clear();
                Double value = materialApproachMapper.materialApproachInfoByDate(constructionId, date, name);
                mapvalue.put(name,value);
            }
//输出data
            map.put(date,mapvalue);

已解决 , 再new一遍即可

 public  Map<String,Object> materialApproachWeekInfo(String constructionId) {
        List<String> dateList=materialApproachMapper.getNearDays();
        List<String> names=materialApproachMapper.materialApproachNameBy(constructionId);
        List<Double> valueList=new ArrayList<>();
        Map<String,Object> mapOne=new HashMap<>();
        List<Object> returnList=new ArrayList<>();
        Map<String,Object>  returnMap=new HashMap<>();
        for(String name : names){
            mapOne=new HashMap<>();
            valueList=new ArrayList<>();
            for(String date : dateList){
                Double value = materialApproachMapper.materialApproachInfoByDate(constructionId, date, name);
                if(value==null){
                    value=0.0;
                }
                valueList.add(value);
            }
            mapOne.put("name",name);
            mapOne.put("value",valueList);
        //    mapOne.put("days",dateList);
            returnList.add(mapOne);
        }
        returnMap.put("list",returnList);
        returnMap.put("date",dateList);


        return returnMap;

    }