You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现用户与其对应作品分组存入Map的问题求解

问题根因

你当前的实现存在两个核心错误:

  1. Map结构定义不符合需求:你声明的是Map<List<String>, List<String>>,用整个用户列表作为唯一key,而预期的Map应该以单个用户名字符串作为key,对应value是该用户的作品/仓库列表。
  2. 数据归集逻辑错误:你在循环外统一声明了names和repoNames两个列表,把所有用户、所有仓库都分别存入这两个全局列表,最后仅调用一次put方法,自然只会生成一个不符合预期的键值对。

修改方案

第一步:调整Map定义

将原有的Map声明修改为正确的泛型类型:

// 原错误定义
// private static Map<List<String>, List<String>> repositoriesUserData = new HashMap<>();
// 修改后正确定义
private static Map<String, List<String>> repositoriesUserData = new HashMap<>();

第二步:重写repositoriesUnderUser方法逻辑

调整循环内的归集逻辑,逐个用户处理并存入Map:

public static String repositoriesUnderUser() throws IOException {
    // 先一次性获取所有协作者,避免循环内重复调用fillList生成冗余对象
    List<String> collaborators = fillList();
    
    for (String userName : collaborators) {
        GHUser user = githubLogin.getUser(userName);
        Map<String, GHRepository> userRepos = user.getRepositories();
        // 为当前用户单独创建仓库列表
        List<String> currentUserRepoNames = new ArrayList<>();
        userRepos.forEach((repoKey, repo) -> {
            currentUserRepoNames.add(repo.getName());
        });
        // 直接将当前用户和对应仓库列表存入Map
        repositoriesUserData.put(userName, currentUserRepoNames);
    }
    // 输出结果就会符合预期
    System.out.println(repositoriesUserData);
    return "temporaryReturn";
}

修改后效果

输出的结构会和你预期的完全一致:{user1=[work1, work2, work3], user2=[work1, work2], userN=[workN]},每个用户对应自己的仓库列表,不会出现覆盖或者归集错误的问题。

内容的提问来源于stack exchange,提问作者Coder101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:57:03