填写Hashmap<Object, Collection<Object>>
我遇到了问题。
每当我想填充HashMap的值部分(在本例中为Collection)时,我的对象(需要添加到Collection中)只获取对象的最后接收值。
例如我的代码是这样的(使用LastFM API):
Map<Object, Collection<Tag>> tracksTags = new HashMap<Track, Collection<Tag>>();
Collection<Track> trackSet = tracks.getPageResults();
Collection<Tag> tags = new HashSet<Tag>();
String artist = "";
String trackTitle = "";
int counter = 0;
for (Track track : trackSet) {
tags.clear();
artist = track.getArtist();
trackTitle = track.getName();
Collection<Tag> tagList = Track.getTopTags(artist, trackTitle,
apiKey);
for (Tag tag : tagList) {
if (counter <= 9) {
counter++;
System.out.println(trackTitle + " " + tag.getName() + " "
+ tag.getCount());
tags.add(tag);
} else
break;
}
counter = 0;
tracksTags.put(track, tags);
}
我的问题是标记只占用最后一次检索的值...仍然不知道为什么。即使我不知道它是否是Hashmap-Filling问题。
感谢任何帮助。
答案 0 :(得分:0)
您的所有曲目都共享相同的内部HashSet
实例
因此,循环顶部的tags.clear()
和填充集合的内部循环会影响所有轨道。
您需要为循环内的每个曲目创建new HashSet<>()
。