2013-12-17 79 views
-2

填寫Hashmap<Object, Collection<Object>>時出現問題。每當我想要填充HashMap的值部分(在這種情況下是集合)時,我的對象(需要添加到集合中)僅取對象的最後接收值。 例如我的代碼是這樣的(使用LastFM等API):Filling HashMaps <對象,集合<Object>>

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

您的第一行是錯誤。 – arshajii

+0

哦,當然...在我的代碼中它寫的是正確的! 將盡快編輯。 – jay

回答

0

所有曲目共享相同的內部HashSet實例。
因此,tags.clear()位於循環的頂部,而內部循環用於填充集合,影響所有的軌道。

您需要爲循環內的每個軌道創建一個new HashSet<>()

+0

這是我的一個嚴重錯誤。 而不是tags.clear我寫了tags = new Hashset ... 謝謝你Slaks! – jay

相關問題