我创建了一个Map,如下所示:
private Map<String, List<Client>> clientCatalogue;
this.clientCatalogue = new TreeMap<String, List<Client>>();
密钥是客户端名称,值是客户端详细信息的列表。
我正在使用keySet()迭代它。我想一次访问一个与键相关联的每个值列表,然后在继续处理下一个值列表之前对每个值进行进一步处理。我已将值复制到List类型变量(clientDetails)中,并认为我将它们打印出来以检查它们。但我一直在回收哈希码。为什么这样,我该怎么做才能解压缩这些哈希码并访问我想要的值?任何建议表示赞赏。
List<Client> clientDetails;
clientDetails = new ArrayList<Client>();
for (String eachClient : this.clientCatalogue.keySet())
{
clientDetails = clientCatalogue.get(eachClient);
System.out.println("Details of client are: " + clientDetails);
}
答案 0 :(得分:2)
试试这个:
for (String eachClient : this.clientCatalogue.keySet())
{
List<Client> clientDetails; = clientCatalogue.get(eachClient);
for(Client cl : clientDetails)
{
System.out.println("Details of client are: " + cl.toString());
}
}
问题在于您是打印整个列表而不是列表中的各个客户端。
顺便说一句,您需要在toString()
课程中正确实施Client
方法。
此外,您无需为List<Clients> clientDetails
创建新实例。
另外,如果您不想迭代键,而是直接在值上执行此操作:
for (List<Client> clientDetails : this.clientCatalogue.values())
{
for(Client cl : clientDetails)
{
System.out.println("Details of client are: " + cl.toString());
}
}
答案 1 :(得分:0)
您应该在客户端类中覆盖 toString()方法。当您尝试通过sysout打印任何对象时,将调用其toString方法,在您的情况下,它将调用Object的类。因此,请将其覆盖为您希望sysout为您打印的方式。
答案 2 :(得分:0)
您需要在toString()
课程中实施Client
,以便返回您要查看的详细信息。
答案 3 :(得分:0)
TreeMap从AbstractMap继承了它的toString方法,看起来它会尝试输出一个漂亮的地图表示,但如果你没有给出clientDetails的toString实现,你就不会得到任何漂亮的东西。但是,您的字符串输出示例有助于确定。