java_sha
九亿少女的梦@
采纳率46.7%
2019-09-05 09:39

这个HashMap的值循环一次就会被覆盖,应该怎么解决呢???

已采纳

图片说明
这个HashMap存的map的值循环一次就会被覆盖,应该怎么解决呢???
能让它存入每一次put的值。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • qq_22847605 qq_22847605 2年前

    一个map中,key值是唯一的,所以想要一个相同的key值拥有多个值。就得采用key -> 数组或集合(将同个key值的value用数组或集合收集,再设置),你上面这种相当于将map一个key值所对应的值设置了无数次

    点赞 1 评论 复制链接分享
  • out_of_it_farmer 弗里德姆 2年前

    姑且猜一下题主的意思:是为了得到一个list。

    for (int i = 0; i < length; i++) {
            Map<String, String> map = getTaskNameAndMusicName(id, type);
            list.add(map);
    }
    
    private  Map<String,String> getTaskNameAndMusicName(int id, String type) {
            Map<String, String> map = new HashMap<>();
            if (type.equals("T")) {
                map.put("taskName", "1");
                map.put("fileName","1");
            } else {
                map.put("taskName", "2");
                map.put("fileName","2");
            }
            return map;
    }
    

    算了,猜不出来。推荐一本书给题主:《学会提问》
    嘿嘿```

    点赞 1 评论 复制链接分享
  • qq_36138652 java-zh 2年前

    你把map放到循环外面一层去,因为你每次循坏的这个这个map都会创建一个新的map。

    点赞 1 评论 复制链接分享
  • weixin_42270490 一丝混乱 2年前

    看代码和你说的话不是很能理解你的需求,因为你没把你的循环代码显示出来
    猜测一下:你的目的是得到
    [{taskName:"name", fileName:"name"},
    {taskName:"name", fileName:"name"},
    {taskName:"name", fileName:"name"},
    ……]
    这样?

    那么你外面的循环大概应该是

    List<Map<String, String>> list = new ArrayList<Map<String, String>>();
    for (…………) {
    …………
    list.add(getTaskNameAndMusicName(id, type));
    …………
    }
    
    

    更新:
    大概懂你意思了,那么你应该这样写:

    Map<String, List<String>> map = new HashMap<String, String>();
    List<String> taskNameList = new ArrayList<String>();
    List<String> fileNameList = new ArrayList<String>();
    map.put("taskName", taskNameList);
    map.put("fileName", fileName);
    for(.....) {
    ...
    TaskMapper mapper = type.equals("T") ? tempTaskMapper : timeingTaskMapper;
    TaskDto dto = mapper.getTaskNameAndMusicName().get(0);
    taskNameList.add(dto.getTaskName());
    fileNameList.add(dto.getFileName());
    }
    ...
    
    

    猜了一个类名TaskMapper,你按照你实际的来就可以

    点赞 1 评论 复制链接分享
  • weimingjue 王能 2年前

    这不叫覆盖,你每次循环都new了一个,根本不是原来那一个了。
    map在循环外面new出来,当入参传进去就行了,return也不需要了直接void

    没仔细看,只解决了其一,另一个看楼下的吧

    点赞 1 评论 复制链接分享