Java 包含多个树集的树映射的打印内容

Java 包含多个树集的树映射的打印内容,java,maps,Java,Maps,我有一个地图,其中包含的键是相册名称,值是这些相册上的歌曲集。我想打印内容,这是我的代码: public void printMap() { Set<String> albumKeys = this.albumMap.keySet(); for (String eachSong : this.albumMap.keySet()) { System.out.println("The tracks on " + albumKeys +

我有一个地图,其中包含的键是相册名称,值是这些相册上的歌曲集。我想打印内容,这是我的代码:

public void printMap() {
    Set<String> albumKeys = this.albumMap.keySet();
    for (String eachSong : this.albumMap.keySet()) {
        System.out.println("The tracks on " + albumKeys + "are: " + albumMap.get(eachSong));
    }
}
public void printMap(){
Set albumKeys=this.albumMap.keySet();
for(字符串eachSong:this.albumMap.keySet()){
System.out.println(“+albumKeys+”上的曲目是:“+albumMap.get(eachSong));
}
}
输出为:

[创世记,月球黑暗面的轨迹是:[海边的家,非法外星人,它会变得更好,只是一份工作,妈妈,海边的第二个家,银色彩虹,一切都太难了,仅此而已] 《创世纪》,《月球的黑暗面》上的轨迹是:[你喜欢的任何颜色,脑损伤,日食,金钱,逃亡,对我说,天空中的伟大演出,我们和他们]

正如您所看到的,两个相册名称每次打印两次。星号表示不应打印的名称


如果有任何帮助,我们将不胜感激。

代码的问题在于,在循环中的每次迭代中,您都要一次打印所有键。 正如官方文件所述

keySet Set keySet()返回包含在 这张地图。该集合由映射支持,因此对映射的更改不受限制 反映在集合中,反之亦然。如果在 集合上的迭代正在进行中(除了通过迭代器的 自身移除操作),迭代的结果未定义。这个 集合支持元素删除,这将删除相应的映射 从映射中,通过迭代器.remove,Set.remove,removeAll, 保留和清除操作。它不支持add或addAll 操作。返回:此映射中包含的键的集合视图

因此,每次迭代只需打印一个键

您已经在for body中使用了字符串表示法(eachSong)中的键:

for (String eachSong: this.albumMap.keySet())
由于您首先打印唱片集的名称,因此必须用eachSong变量替换albumKeys变量

但变量名中存在不准确之处。 实际上,您可以打印唱片集名称,但出于某些原因,请使用
eachSong
name

正如罗伯特·C·马丁(Robert C.Martin)的“干净代码”所述

选择描述性和明确的名称

所以最好叫它,比如说,
eachAlbum

此代码应适用于:

 Set<String> albumKeys = this.albumMap.keySet();
 for (String eachAlbum: this.albumMap.keySet())
{
System.out.println("The tracks on " + eachAlbum + " are: " + albumMap.get(eachAlbum));
} 
Set-albumKeys=this.albumMap.keySet();
for(字符串eachAlbum:this.albumMap.keySet())
{
System.out.println(“在”+eachAlbum+上的曲目是:“+albumMap.get(eachAlbum));
}