【问题标题】:Filling HashMaps <Object, Collection<Object>>填充 HashMaps <Object, Collection<Object>>
【发布时间】:2013-12-17 19:19:38
【问题描述】:

填写Hashmap&lt;Object, Collection&lt;Object&gt;&gt; 时遇到问题。 每次我想填充 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);


}

我的问题是 tags 只取最后一次检索的值......仍然不知道为什么。即使我不知道这是否是一个 Hashmap-Filling 问题。

不胜感激。

【问题讨论】:

  • 你的第一行是一个错误。
  • 哦,当然……在我的代码中它写得是正确的!将尽快编辑。

标签: java collections hashmap last.fm


【解决方案1】:

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

您需要为循环内的每个轨道创建一个new HashSet&lt;&gt;()

【讨论】:

  • 这是我的一个严重错误。而不是 tags.clear 我写了 tags = new Hashset...谢谢你 Slaks!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2018-02-24
  • 2012-07-14
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多