Java实现用户与其对应作品分组存入Map的问题求解
问题根因
你当前的实现存在两个核心错误:
- Map结构定义不符合需求:你声明的是
Map<List<String>, List<String>>,用整个用户列表作为唯一key,而预期的Map应该以单个用户名字符串作为key,对应value是该用户的作品/仓库列表。 - 数据归集逻辑错误:你在循环外统一声明了
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
相关产品推荐
相关产品推荐

