在Java中从映射内的集合访问对象

在Java中从映射内的集合访问对象,java,hashmap,hashset,Java,Hashmap,Hashset,我试图在Java中创建一个方法,调用该方法时,它将遍历映射,查找输入的键,并从集合中检索对象集及其值 对于上下文,这是一个包含两个类的应用程序,Book和Author,其中Author拥有一组书籍,其中包含属性title和yearPublished。课程资料如下: 课堂用书 公共课堂教材 { //实例变量 私有字符串标题; 出版的私人刊物; /** *类Book对象的构造函数 */ 公共图书(字符串aTitle,整年) { this.title=aTitle; this.yearPublishe

我试图在Java中创建一个方法,调用该方法时,它将遍历映射,查找输入的键,并从集合中检索对象集及其值

对于上下文,这是一个包含两个类的应用程序,Book和Author,其中Author拥有一组书籍,其中包含属性title和yearPublished。课程资料如下:

课堂用书

公共课堂教材
{
//实例变量
私有字符串标题;
出版的私人刊物;
/**
*类Book对象的构造函数
*/
公共图书(字符串aTitle,整年)
{
this.title=aTitle;
this.yearPublished=一年;
}
类作者

公共类作者
{
//实例变量
私人地图册;
/**
*类Author的对象的构造函数
*/
公共作者()
{
bookSet=newhashmap();
}
我还创建了一个方法来填充测试数据,以便测试我的其他方法:

/**
*此方法可用于填充测试数据。
*/
public void createTestData()
{
Set collection=newhashset();
book1=新书(《蝇王》,1954年);
Book book2=新书(《另一个苍蝇之王》,1955年);
Book book3=新书(“牙买加客栈”,1936年);
收藏。添加(第1册);
收藏。添加(第2册);
收藏。添加(第3册);
图书集。put(“威廉·戈尔丁”,收藏);
Set collection2=新的HashSet();
book4=新书(《柳树中的风》,1908年);
Book book5=新书(《雾都孤儿》,1838年);
集合2.添加(第4册);
集合2.添加(第5册);
图书集(Kenneth Grahame),收藏2);
}
我需要的是一个方法,它不带任何参数,迭代地图并打印出组合地图键+图书信息(图书标题和年鉴)

到目前为止,我写了以下内容:

/**
*将系统中当前的作者和所有编写的书籍打印到标准输出
*由他们,连同它出版的年份。
*/
public void printMap()
{
for(字符串键:bookSet.keySet())
{
System.out.println(key+“”+bookSet.get(key));
}
}
然而,输出却相当奇怪:

威廉·戈尔丁[Book@e8a4d45, Book@4f196e15, Book@69f8d3cd]肯尼斯 格雷厄姆[Book@19d6f478, Book@6f4bff88]

有没有关于我该如何处理这件事的想法

此外,我还试图找到一种检索书籍集的方法,该方法使用一个参数(map键)并将map键(作者姓名)和他们所写的所有书籍(title和yearPublished)打印到标准输出。这是我到目前为止得到的:

/**
*在映射中搜索作为参数输入的键。如果参数是映射中的键,则打印
*其关联值的文本表示,否则打印输出行
*钥匙不在。
*/
公共void printMapValue(字符串aKey)
{
System.out.println(“由“+aKey+”编写的书籍是:“+bookSet.get(aKey));
}
结果还是很奇怪:

example.printMapValue("William Golding");
威廉·戈尔丁的著作有:[Book@e8a4d45, Book@4f196e15, >Book@69f8d3cd]

如果有人能帮我,我将不胜感激


提前感谢。

您需要重写
书籍
类的
toString()
方法以获得可打印字符串

public String toString()
{
    return title;
}

您需要重写
Book
类的
toString()
方法来获取可打印字符串

public String toString()
{
    return title;
}

只需在
书籍
类中重写
对象
类的
toString()
方法

e、 g


只需在
书籍
类中重写
对象
类的
toString()
方法

e、 g


每个Java对象都隐式地扩展/继承类。当打印对象(比如通过将其传递到System.out.print)或将其连接到字符串(如您的情况)时,它需要对象的字符串表示形式。它从基(
对象
)的
toString
方法获取此表示形式类的默认行为是

因此,您需要在Book类中重写它,以获得用户友好的表示。 也许有一种可能的说法

@Override
public String toString() {
   return title;
}

每个Java对象都隐式地扩展/继承类。当打印对象(比如通过将其传递到System.out.print)或将其连接到字符串(如您的情况)时,它需要对象的字符串表示形式。它从基(
对象
)的
toString
方法获取此表示形式类的默认行为是

因此,您需要在Book类中重写它,以获得用户友好的表示。 也许有一种可能的说法

@Override
public String toString() {
   return title;
}