嘿,我认为我有一些逻辑问题,但我仍然无法真正看到问题所在。 我知道问题出在HashSet之间,仅此而已。
我正在使用HashMap,键是numberOfEpisode,值是HashSet。 因此,如果“数组列表”中的这些动漫具有相同的情节数量(例如12),则将它们添加到新的HashSet中,然后添加到HashMap中。
代码
HashSet<Strings> animeNames;
for(Anime anime : animius.getListOfAnime){
animeNames = new HashSet<>();
for(Anime anime2 : animius.getListOfAnime){
for(Episode episode : anime.getListOEpisode){
for(Episode episode2 : anime2.getListOfEpisode{
if(episode.getNumber == episode2.getNumber){
animeNames.add(anime.getName);
animius.getEpisodeAndAnimeIndex.put(episode.getNumber, animeNames)
}
}
}
}
}
输出
格式化后。假设只有动漫1与动漫2有相似之处,但动漫2有2个键,一个键有12集,另一个键有24集。
12 ---- anime1,anime2 <---这是正确的
24 ---- anime1,anime2 <---这是错误的
预期产量
12 ---- anime1,anime2
24 ---- anime2
尝试的解决方案
我创建了2个HashSet,其中一个包含anime.getName的值,另一个包含anime2.getName。
我还尝试了在每个循环中将不同的animeNames和animeNames2的新实例化
答案 0 :(得分:1)
如果我没有误会你,则不需要嵌套4个for循环。您只想检查收藏集中的每个动画的集数,然后进行存储。本质上,将动漫按照剧集数量分组。下面的代码可以做到这一点。
HashMap<Integer, Set<Anime>> animeMap = new HashMap<>();
for(Anime anime : animius.getListOfAnime){
int numberOfEpisodes = anime.getListOEpisodes().size();
if (animeMap.contains(numberOfEpisodes) {
animeMap.get(numberOfEpisodes).add(anime);
} else {
HashSet<Anime> animeNames = new HashSet<>();
animeNames.add(anime);
animeMap.put(numberOfEpisodes, animeNames);
}
}