填充HashMaps <object,collection <object =“”>&gt; </object,>

时间:2013-12-17 19:19:38

标签: java collections hashmap last.fm

填写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问题。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的所有曲目都共享相同的内部HashSet实例 因此,循环顶部的tags.clear()和填充集合的内部循环会影响所有轨道。

您需要为循环内的每个曲目创建new HashSet<>()