Java 填充HashMaps<;对象、集合<;对象>&燃气轮机;
我在填写Java 填充HashMaps<;对象、集合<;对象>&燃气轮机;,java,collections,hashmap,last.fm,Java,Collections,Hashmap,Last.fm,我在填写Hashmap时遇到了一个问题。 每次我想要填充HashMap(在本例中是集合)的值部分时,我的对象(需要添加到集合中)只接受对象的最后一个接收值。 例如,我的代码如下(使用LastFM API): Map tracksTags=newhashmap(); Collection trackSet=tracks.getPageResults(); 集合标记=新的HashSet(); 弦乐艺术家=”; 字符串trackTitle=“”; int计数器=0; 用于(轨道:轨道集){ tags.
Hashmap
时遇到了一个问题。
每次我想要填充HashMap(在本例中是集合)的值部分时,我的对象(需要添加到集合中)只接受对象的最后一个接收值。
例如,我的代码如下(使用LastFM API):
Map tracksTags=newhashmap();
Collection trackSet=tracks.getPageResults();
集合标记=新的HashSet();
弦乐艺术家=”;
字符串trackTitle=“”;
int计数器=0;
用于(轨道:轨道集){
tags.clear();
artist=track.getArtist();
trackTitle=track.getName();
集合标记列表=Track.getTopTags(艺术家、trackTitle、,
阿皮奇);
用于(标记:标记列表){
如果(计数器所有曲目共享同一个内部哈希集
实例。
因此,循环顶部的tags.clear()
和填充集合的内部循环会影响所有轨迹
您需要为循环中的每个曲目创建一个new HashSet()
。您的第一行是一个错误。哦,当然……在我的代码中它写的是正确的!将尽快编辑。这对我来说是一个严重的错误。而不是标记。清除我写的标记=新HashSet…谢谢!
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);
}